• 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是具有一个操作对象的指令

  • 相关阅读:
    JavaScript autoComplete 1.2
    Linux下安装配置git
    《SQL Server 2008从入门到精通》20180627
    《SQL必知必会》知识点汇总
    关于js的setTimeout和setInterval
    关于js的闭包
    web图片类型
    关于绑定事件
    js原型与继承
    关于js的mouseout
  • 原文地址:https://www.cnblogs.com/tanrong/p/6868262.html
Copyright © 2020-2023  润新知