第五章

注意事项

  • 汇编源程序中,不能以字母开头,要在前面加0
    1
    mov ah,0ffffh
  • Debug 和 masm编译器对形如mov ax,[idata] 这类指令在解释上的不同。
    debug对其解释为[idata]的一个内存单元,而编译器解释为数据idata
  • 在汇编源程序中[idata]的用法
    • 如果idata是实数,必须显式的在[]前面给出段地址 mov al,ds:[0],或者用寄存器中的值当做段地址(段前缀) mov al,ds:[bx]
    • 如果idata代表一个寄存器bx ax ...[bx]直接代表了bx寄存器中地址处的值

段前缀

出现在访问内存单元的指令中,用于显式的指明内存单元的段地址的

1
2
3
4
ds:
cs:
ss:
es:

在汇编语言中称为段前缀

安全的代码区域

在一般PC机中,DOS方式下,DOS和其他合法程序一样不会使用 0:200~0:2ff(00200h~002ffh)的256字节,这段空间是安全的,进入debug后查看一下这段内存空间,全是0表明没有被使用。

第5章课后实验

  • mov ax,4c00H之前的指令复制到0:200处:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
assume cs:code
code segment

mov ax,cs ; or mov ax,code
mov ds,ax
mov ax,0020H
mov es,ax
mov bx,0
mov cx,18H ; or sub cx,5

s: mov al,[bx]
mov es:[bx],al
inc bx
loop s

mov ax,4c00H
int 21H

code ends
end

mov cx,18H 解释: 将程序debug后发现代码段 mov ax,4c00H 地址为0017H.