补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在DX中
assume cs:code
code segment
start:mov ax,2000h
mov ds,ax
mov bx,0
s: mov cl,[bx]
mov ch,0
inc cx ;此处为要填写的空行
inc bx
loop s
ok:dec bx ;dec指令的功能和inc相反,dec bx进行的操作为:(bx)=(bx)-1
mov dx,bx
mov ax,4c00h
int 21h
code ends
end start
还有一个实验记录如下:
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start: mov ax,0
s: nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
codesg ends
end start
单步调试结果如下:
对应的机器码如下:
上面是两张图,中间有重
程序在跳到S处时,执行完指令后就跳到第一条指令去了。原因是jmp short s1对应的机器码中给出的位移值,而不是目的地址,从图中可以看出是F6,等于-10,即当前指令执行完成后IP+2然后-10,回到S1标号处,当把这条指令放到start的下一条语句时,它对应的机器指令指明,IP也应该-10,上移10个位置,所以就到了第一条指令mov ax 4c00h,而不是跳到s1处