实验五

实验结论

实验任务1

将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题

assume cs:code, ds:data, ss:stack
data segment
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
data ends

stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

code segment
start: mov ax,stack
mov ss, ax
mov sp,16

mov ax, data
mov ds, ax

push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]

mov ax,4c00h
int 21h

code ends
end start

先在debug下进行编译,连接

分别进行反汇编u命令和调试g命令,将其一次性调试完。

然后进行填空

实验任务2

将下面的程序编译、连接,用debug加载、跟踪,然后回答问题。

assume cs:code, ds:data, ss:stack
data segment
dw 0123h, 0456h
data ends

stack segment
dw 0, 0
stack ends

code segment
start: mov ax,stack
mov ss, ax
mov sp,16

mov ax, data
mov ds, ax

push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]

mov ax,4c00h
int 21h

code ends
end start

操作步骤同任务一。

 

实验任务3

将下面的程序编译、连接,用debug加载、跟踪,然后回答问题。

assume cs:code, ds:data, ss:stack

code segment
start: mov ax,stack
mov ss, ax
mov sp,16

mov ax, data
mov ds, ax

push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]

mov ax,4c00h
int 21h

code ends
data segment
dw 0123h, 0456h
data ends

stack segment
dw 0,0
stack ends
end start

操作步骤同上

实验任务4

将以上三题中最后一条伪指令“end start"改为”end"(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?请说明原因。

任务三的代码仍然可执行。因为将 start 去掉之后 CPU 会认为从头开始所有的指令都算做代码,也就是说数据段也会被包含在代码段中,因此会产生错误,而第三题的代码段恰好不包含数据段,所以可以正确执行。

实验任务5

程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。

assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends

b segment
db 1,2,3,4,5,6,7,8
b ends

c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov bx,0
mov cx,8
mov ax,a
mov ds,ax
mov ax,c
mov es,ax
s: mov dx,0
mov ax,a
mov ds,ax
add dl, [bx]
mov ax,b
mov ds,ax
add dl,[bx]
mov es:[bx],dl
inc bx
loop s
mov ax,4c00h
int 21h

code ends
end start

要填写的部分是start中代码段的内容,已用粗体标出,通过g命令调试并用d命令查看是否正确。

c段中数据依次应该为02,04,06,08,0a,0c,0e,10,确认无误。

实验任务6

编写code段中的代码,用push命令将a段中的前8个字型数据,逆序存储到b段中

assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
dw 8 dup(0)
b ends

code segment
start:
mov ax,b
mov ss,ax
mov sp,10h
mov ax,a
mov ds,ax
mov cx,8
mov bx,0
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int ax,21h
code ends
end start

要填写的部分是start中代码段的内容,已用粗体标出,通过g命令调试并用d命令查看是否正确。

 

实验结果已完成逆序存放,关注最后一行,00代表偏移地址,确认无误。

总结与体会

1.本实验要熟练掌握代码的编写,实现将数据,代码,栈放入不同的段。

2.学会检验代码,即编写完代码后进行编译,运行,调试,查看步骤。

3.通过本实验,我还存在一个问题:段地址的计算。

 

posted @ 2018-12-02 14:26  江小雯  阅读(244)  评论(0编辑  收藏  举报