汇编语言(四)

5. [BX]和loop指令

  • [bx]表示一个内存单元,它的偏移地址在bx中:mov ax,[bx]

  • 描述性符号()表示一个寄存器或一个内存单元中的内容

  • idata表示常量

5.1 [BX]

  • mov ax,[bx]bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处数据送入ax中。

  • mov [bx],axbx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax数据送入内存ax中。

问题5.1 程序和内存情况
mov ax,2000H
mov ds,ax
mov bx,1000H
inc bx;相当于bx加一
inc bx
mov [bx],ax
inc bx
inc bx
mov [bx],al
inc bx
mov [bx],al 

5.2 Loop指令

  1. loop指令格式:loop 标号;执行分为两步:(cx)=(cx)-1;判断cx值是否为零,不为零则跳转到标号出执行程序,零则向下执行。

  2. 通常用loop指令实现循环功能,cx中存放循环次数

    计算 2*12
    assume cs:code
    code segment
    	mov ax,2
    	mov cx,11;设置循环次数
    s:	add ax,ax;设置循环体,标号为s
    	loop s
    	mov ax,4c00h
    	int 21h
    code ends
    end
    

5.5 loop和[bx]的联合应用

assume cs:code
code segment
   mov ax,0ffffH
   mov ds,ax
   mov bx,0;初始化ds:bx指向ffff:0
   mov dx,0;初始化累加寄存器dx,(dx)=0
   mov cx,12;初始化循环计数寄存器cx,(cx)=12
s:	mov al,[bx]
   mov ah,0
   add dx,ax;间接向dx中加上((ds)*16+(bx))单元的数值
   inc bx;ds:bx指向下一个单元
   loop s
   mov ax,4c00H
   int 21h
code ends
end

5.6 段前缀

  • mov ax,ds:[bx]将一个内存单元内容送入ax。偏移地址在bx中,段地址在ds中。
  • mov ax,cs:[bx]将一个内存单元内容送入ax。偏移地址在bx中,段地址在cs中。

出现在访问内存单元的指令中,用于显式地指明内存单元的段地址ds:等等,在汇编语言中称为段前缀

5.8 段前缀的使用

assume cs:code
code segement
	mov ax,0ffffH
	mov ds,ax;(ds)=0ffffH
	mov ax,0020h
	mov es,ax;(es)=0020h
	mov bx,0;(bx)=0,将ds:bx指向0020:0
	mov cx,12;(cx)=12,循环12次
s:	mov dl,[bx];(dl)-(ds)*16+(bx))
	mov es:[bx],dl;((es)*16+(bx)=(dl))
	inc bx;(bx)=(bx)+1
	loop s
	mov ax,4c00h
	int 21h
	
code ends
end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值