实验3 编程、编译、链接、跟踪
assignment 1
编译链接生成可执行文件
assignment 2
- debug将程序载入内存,设置CS:IP:程序所在内存段的段地址为
D
S
=
075
C
DS=075C
DS=075C,则PSP的地址为
075
C
:
0
075C:0
075C:0,程序的地址为
076
C
:
0
(
075
C
+
10
:
0
)
076C:0\;(075C+10:0)
076C:0(075C+10:0),
C
S
:
I
P
=
076
C
:
0000
CS:IP = 076C:0000
CS:IP=076C:0000
- 跟踪程序执行过程
用P命令执行INT 21
assignment 3
- 查看PSP的内容
实验4 [bx]和loop的使用
assignment 1
- 编写源程序
assume cs:codesg
codesg segment
mov ax, 0020H
mov ds, ax
mov bx, 0
mov dx, 0
mov cx, 64
s:
mov [bx],dx
inc bx
inc dx
loop s
mov ax, 4c00h
int 21h
codesg ends
end
- 编译,链接生成可执行文件
- 查看载入内存的程序,可以看见标签s已被替换为地址 076 C : 000 E 076C:000E 076C:000E
- 执行程序,验证结果,正确
assignment 2
- 编写源程序:将bx寄存器两用,即作偏移地址,又作操作数,可将程序缩短为9条指令
assume cs:codesg
codesg segment
mov ax, 0020H
mov ds, ax
mov bx, 0
mov cx, 64
s:
mov [bx],bx
inc bx
loop s
mov ax, 4c00h
int 21h
codesg ends
end
- 其它步骤与assigment 1一致,验证结果,正确
assignment 3
- 复制的是什么:复制程序的第一条指令mov ax,cs到 loop s 指令至内存地址 0020 : 0000 0020:0000 0020:0000处
- 如何知道程序的字节数:首先可以确定第一个空应该填入CS,这是程序的段地址,其次在
mov cx,_____
上先随意填一个1,用debug跟踪程序,用U命令查看程序所占地址范围: 076 C : 0000 → 076 C : 0015 076C:0000 \to 076C:0015 076C:0000→076C:0015,共 16 H ( 23 D ) 16H\,(23D) 16H(23D)个字节,因此第二个空应该填入 16 H 16H 16H