zoukankan      html  css  js  c++  java
  • Linux 之 AT&T汇编语言 mov、add、sub指令、数据段

    mov指令的几种形式:

    mov 寄存器、 数据
    mov ax,8888

    mov 寄存器、 寄存器
    mov bx,ax

    mov 寄存器、 内存单元
    mov ax,[0]

    mov 内存单元、寄存器
    mov [0],ax

    mov 段寄存器、寄存器
    mov ds,ax

    add和sub指令和mov一样,都有2个操作对象。

    sub和add类似,不过是相减,
    sub ax,9 给ax减9,之后的结果赋值给ax
    sub ax,bx 语意是ax = bx - ax
    sub ax,[0] 将偏移地址为0的内存单元 - ax 再赋值给ax

    试一下:能不能用他们直接操作段地址? (试过了,不行)

    3.5 数据段
    前面讲过,对于8086 PC机,我们可以根据需要将一组内存单元定义为一个段(可以是代码段,数据段等)

    如何访问内存中的数据段呢?
    将一段内存当作数据段,是我们在编程时的一种安排,我们可以在具体操作的时候,
    用DS存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元

    mov ax,123BH
    给AX寄存器里放123BH
    mov ds,ax
    将123BH送入DS中,作为数据段的段地址。
    mov ax,0
    用AX存放累加结果

    add ax,[0]
    将数据段的第一个字,(偏移地址为0),加到AX中,会把1也拖过去做高位字节,因为0那里是八位的数据,要凑齐16位的,

    add ax,[2]
    将数据段的第三个字(0.1.2),(偏移地址为2),加到AX中去,会把3也拖过去。
    add ax,[4]
    将数据段的第五个字(0.1.2.3.4),(偏移地址为4),加到AX中去,会把5也拖过去。

    3.1~3.5,
    字在内存单元中存储时,要用两个地址连续的内存单元来存放
    字的低位字节存放在低地址单元,高位字节存放在高地址单元中。

    用MOV指令要访问内存单元的时候,可以在MOV指令中只给出单元的偏移地址。
    此时,段地址默认在DS寄存器中。

    在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应。

    mov,add,sub是具有两个操作对象的指令,jmp是具有一个操作对象的指令

  • 相关阅读:
    线性代数思维导图——3.向量
    微分中值定理的基础题型总结
    构造函数
    Python课程笔记(七)
    0241. Different Ways to Add Parentheses (M)
    0014. Longest Common Prefix (E)
    0013. Roman to Integer (E)
    0011. Container With Most Water (M)
    0010. Regular Expression Matching (H)
    0012. Integer to Roman (M)
  • 原文地址:https://www.cnblogs.com/tanrong/p/6868262.html
Copyright © 2011-2022 走看看