#pragma once
/* 26-[BX]和Loop指令04
温故而知新
【bx】的作用:作为偏移地址与DS配合
loop和cx合作
debug的-g 偏移地址 命令 和 -p命令
Debug和汇编编译器Masm对指令的不同处理
本节只试点为下面刻成的顺利进行提供一点预备知识。
我们在Debug中写过类似的指令:
mov ax,[0]
表示将ds:0处的数据送入al中。
但是在汇编源程序中,指令“mov ax,[0]”被编译器当作指令“mov ax,0”处理。
示例
示例任务:将内存2000:0、2000:1 、2000:2、2000:3单元中的数据送入al,bl,cl,dl中。
(1)在Debug中编程实现
(2)汇编程序实现
在Debug中编程实现
两种实现的实际实施情况
mov ax,2000h
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
mov dl,[3]
对比汇编程序实现
assume cs:code
code segment
mov ax,2000h
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
mov dl,[3]
mov ax,4c00h
int 21h
code ends
end
如果一定要像DEBUG那样
在MASM中mov ax, [2]是解释为mov ax,2的。一般我们是通过BX来代替,像这道题我们先mov bx, 2 再通过mov ax, [bx]来实现。
但是我们要像DEBUG一样直接用[2]可以吗?答案是……
可以的,不过要加上段地址!!试试!
对比以下指令分辨:
mov al, [0]
mov al, ds:[0]
mov al, [bx]
mov al, ds:[bx]
该形式就是我们在OD 中看到的!我们以后在编译器中也应该如此进行编译!!!!
另外Debug 中 P不但可以结束 程序,也可以结束循环 。
在masn 编译器中 下面的汇编指令 其真正会被编译成?其真正的意思是?
mov al, [0] mov al,0 al = 0
mov al, ds:[0] mov al,ds:[0] al = (ds:[0])
mov al, [bx] mov al, [bx] al = (ds:[bx])
mov al, ds:[bx] mov al, ds:[bx] al = (ds:[bx])
*/