汇编学习笔记(2)

LOOP指令

1. 功能:实现循环(计数型循环)

2. 格式:LOOP + 标号

3. cpu执行LOOP语句时进行的操作:

  • cx = cx-1
  • 判断cx的值,如果不为零则转到标号处执行程序,如果为零则向下执行。

例如:

    mov bx,2
    mov cx,11
loop_start:  
    mov ax,bx                    # 循环体中的代码  
    add ax,ax                    # 例如,打印一些字符或执行一些计算  
  
    loop loop_start  ; 使用LOOP指令,每次循环都将CX减1,如果CX不为0,则跳转到loop_start继续循环  

 图中循环将会执行11次,每一次循环AX寄存器里存的数会加2.

变址寄存器SI和DI

SI和DI是和BX功能相近的寄存器,可以用于存放地址信息。

SI寄存器:

SI(Source Index):源变址寄存器,用于存放源数据的地址(偏移地址)。在数据传送或字符串操作中,SI寄存器通常指向源数据的起始位置。

使用方法:

mov SI,0
mov ax,[SI]
或
mov SI,0
mov ax,[SI + 123]

DI寄存器:

DI(Destination Index):目标变址寄存器,用于存放目标数据的地址(偏移地址)。在数据传送或字符串操作中,DI寄存器通常指向目标数据的起始位置。

使用方法:

mov DI,0
mov ax,[DI]
或
mov DI,0
mov ax,[DI + 123]

例如,如果要将下面这段程序中的'welcome to masm!'复制到后面的数据区中,我们可以用DS:SI指向要复制的原始字符串,用DS:DI指向目的空间(后面的数据区),然后循环复制即可。

寻址方式

[bx + idata]寻址方式

[bx + idata]表示一个内存单元,他的偏移地址为bx+idata,代表的是DS:[bx+idata]

  • mov ax,[bx + 200]的含义:将一个长度为2字节的内存单元送入ax,内存单元的段地址在DS中,偏移地址为bx里的值加上200。
  • 其他写法:mov ax,[200 + bx]、mov ax,200[bx]、mov ax,[bx].200

[bx + SI]寻址方式

[bx + SI]表示一个内存单元,他的偏移地址为bx + SI,代表的是DS:[bx+SI]

  • mov ax,[bx + SI]的含义:将一个长度为2字节的内存单元送入ax,内存单元的段地址在DS中,偏移地址为bx里的值加上SI的值,其中bx叫基址,SI叫变址。
  • mov ax,[bx + SI]的数学化描述:(ax) = ((ds)*16 + bx + si)
  • 其他写法:mov ax,[bx][SI]

[bx + SI + idata]寻址方式

 [bx + SI + idata]表示一个内存单元,他的偏移地址为bx + SI + idata,代表的是DS:[bx+SI+idata]

  • mov ax,[bx + SI + idata]的含义:将一个长度为2字节的内存单元送入ax,内存单元的段地址在DS中,偏移地址为bx里的值加上SI的值再加上idata的值。
  • mov ax,[bx + SI + idata]的数学化描述:(ax) = ((ds)*16 + bx + si + idata)
  • 其他写法:mov ax,200[bx][si]、mov ax,[bx].200[si]、mov ax,[bx][si].200

 指针寄存器BP

BP用于内存寻址时功能和用法与bx相同,但是两者有有区别;

  • bx是唯一可以用于内存寻址的通用寄存器,bx以外的通用寄存器、段寄存器都不可以用于[....]中。
  • BP也用做基址
  • 在没有指明的情况下,bx的段地址默认是DS段(数据段),BP的段地址默认是SS段(栈段)

 div指令

存放:

div是除法指令,使用div做除法时:

  • 被除数:被除数放在AX或AX和DX中,当被除数为8位或16位(字节和字)时,用AX存,如果是32位(双字),则用AX和DX存(DX存高位,AX存低位)。
  • 除数:8位或16位,放在寄存器或内存单元中。

用法:

  • div 寄存器

  • div 内存单元 

dup指令

DUP(Define Unary Operator for Plurality,用于定义单一操作符的复数形式)是一个操作符,用于在数据定义中重复指定的数据或数据模式。这可以非常方便地初始化大型数据结构,如数组或内存块。 

功能:

dup和dd、dw、db等数据定义伪指令配合使用,用来进行数据的重复。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值