概述
5. [BX]和loop指令
-
[bx]表示一个内存单元,它的偏移地址在bx中:
mov ax,[bx]
-
描述性符号
()
表示一个寄存器或一个内存单元中的内容 -
idata
表示常量
5.1 [BX]
-
mov ax,[bx]
bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处数据送入ax中。 -
mov [bx],ax
bx中存放的数据作为一个偏移地址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指令
-
loop指令格式:
loop 标号
;执行分为两步:(cx)=(cx)-1
;判断cx值是否为零,不为零则跳转到标号出执行程序,零则向下执行。 -
通常用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
最后
以上就是正直大侠为你收集整理的汇编语言(四)的全部内容,希望文章能够帮你解决汇编语言(四)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复