[BX]和内存单元的描述
- 描述一个内存单元,需要两种信息:
- 内存段元的地址
- 内存单元的长度(类型)
- [BX]同样也变是一个内存单元,他的偏移地址在bx中:
- mov ax,[bx]
- mov al,[bx]
-
描述性符号“()”
ax中的内容为0010H:(ax)=0010H;
- 2000:1000出的内容为0010H:(21000H)=0010H;
- mov ax,[2]:ax=((ds)*16+2);
- mov [2],ax:((ds)*16+2)=(ax);
- add ax,2:(ax)=(ax)+2;
- push ax:(sp)=(sp)-2 ((ss)*16+sp)=(ax)
pop ax:(ax)=((ss)*16+sp) (sp)=(sp)+2
Loop
指令格式:loop标号,CPU执行loop指令的时候:
- (cx)=(cx)-1;
- 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行
2^12,结果放在ax;
assume cs:codesg
codesg segment
tong: mov ax,2
mov cx,11
s:add ax,ax
loop s
mov ax,4c00H
int 21H
codesg ends
end tong
ds:[bx]
- loop&cx
- degub -g&-p
mov ax,[0]:表示ds:0处的数据放入al中。但是在汇编元程序中,指令mov ax,[0]被编译器当做指令mov ax,0处理。
assume cs:codesg
codesg segment
tong:
mov ax,1000H
mov ds,ax
mov ax,11
mov [0],ax
mov ax,22
mov [1],ax
xor ax,ax
mov ax,[0]
xor ax,ax
mov ax,[1]
mov ax,4c00H
int 21H
codesg ends
end tong
loop和[bx]的联合应用
计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中。
- 数据单元是8位的,不能加到16为的寄存器中。
- 与dx结合,loop循环
类型的匹配和结果的不超界
assume cs:codesg
codesg segment
tong:
mov ax,0ffffH
mov ds,ax
mov cx,0bH
xor dx,dx
xor bx,bx
s:mov al,[bx]
mov ah,0
add dx,ax
inc bx
loop s
mov ax,4c00H
int 21H
codesg ends
end tong
将ffff:0~ffff:b的数值复制到0:200~0:20b中
可以将0:200~0:20b用0020:0~0020:b表示
assume cs:codesg
codesg segment
tong:
mov cx,06H
mov bx,0h
s:mov ax,0ffffh
mov ds,ax
mov dx,[bx]
mov ax,0020h
mov ds,ax
mov [bx],dx
add bx,2
loop s
mov ax,4c00H
int 21H
codesg ends
end tong
上面方法换数据段地址,效率不高。可以使用两个数据寄存器。
assume cs:codesg
codesg segment
tong:
mov cx,0bh
mov ax,0ffffh
mov ds,ax
mov ax,0020h
mov es,ax
xor bx,bx
s: mov al,ds:[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00H
int 21H
codesg ends
end tong
就是秀~~~