CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
一、[BX]和loop指令
1. BX
BX:数据寄存器。[bx]表示内存单元,偏移地址为bx,类似于[0],偏移地址为0。
2. loop指令
cpu执行loop指令时进行两步操作
- (cx)=(cx)-1;
- 判断cx中的值,不为0则转至标号处执行程序,如果为0则向下执行。
计算 $2^{12}$的值
assume cs:code
code segment
mov ax,2
mov cx,11
s: add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end
3. debug命令
r :查看寄存器的内容
t :执行当前命令
a :指定地址写入汇编指令
q :退出debug
g :从当前指令或指定地址开始运行程序
p : 类似于t,但会跳过子程序调用,可以用来执行loop指令,会重复执行直至(cx)=0
4. 段前缀
mov ax,ds:[bx]
mov ax,cs:[bx]
mov ax,ss:[bx]
mov ax,es:[bx]
mov ax,ss:[0]
mov ax,cs:[0]
访问内存单元的指令中用于显式指明内存单元的段地址ds:,cs:,ss:,es:,称为段前缀。
5. 实验4
(1)向内存0:200~0:23F依次传送数据0-63(3FH)。
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
mov al,0
s: mov dl,al
mov ds:[bx],dl
inc bx
inc al
loop s
mov ax,4c00h
int 21h
code ends
end
(2)向内存0:200~0:23F依次传送数据0-63(3FH)。9条指令
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s: mov ds:[bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end