汇编语言 实验5

Posted cjh-1023

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言 实验5相关的知识,希望对你有一定的参考价值。

实验5

实验任务1:编写、运行书中含有多个段的程序,观察实验结果,完成填空

(1)

 技术分享图片

(2)

 技术分享图片

(3)(4)

 技术分享图片

简要调试过程:

 技术分享图片

 技术分享图片

tips:

程序返回后有许多附属的代码段

技术分享图片技术分享图片技术分享图片

 

实验任务2:编写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

c0 segment ; 在集成软件环境中,请将此处的段名称由c→改为c1或其它名称
db 8 dup(0)
c0 ends ; 改的时候要成对一起修改

code segment
start:
;修改(不能用栈,因为入栈出栈都是以字数据为一个单元来完成的,而这里是字节型数据)
mov ax,a
mov ds,ax

mov bx,0
mov cx,8h

to:mov ah,0
mov al,[bx]
mov dx,b
mov es,dx
add al,es:[bx]
mov dx,c0
mov es,dx
mov es:[bx],al
add bx,1
loop to
;修改
mov ax,4c00h
int 21h
code ends
end start

 进入debug环境,用反汇编查看代码:

技术分享图片

技术分享图片

在实现数据相加前后,逻辑段 c 的 8 个字节:

 技术分享图片

调试过程:

 技术分享图片

技术分享图片

 

实验任务3:编写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,a
mov ds,ax

mov ax,b
mov ss,ax
mov sp,10h

mov bx,0
mov cx,8h

s0:push [bx]
add bx,2h
loop s0

mov ax,4c00h
int 21h
;修改
code ends
end start

进入debug环境后,用反汇编查看代码:

技术分享图片

在 push 操作执行前后,查看逻辑段 b 的 8 个字单元:

 技术分享图片

调试过程:

 技术分享图片

 技术分享图片

 技术分享图片

 

实验5——总结

收获:通过这次实验,我懂得了怎么将各个寄存器分段进行存储(也可以在cs段前面定义数据,但是这样没有用分段这么简洁明了),知道了分段存储时段与段之间的相对位置关系,明白了标号和程序入口的重要性,学会了利用栈段做各种数据存储的操作。

 

问题:分段存储时,为什么段与段之间的相对位置不会发生改变呢?这样的相对位置是如何得到的呢?












































以上是关于汇编语言 实验5的主要内容,如果未能解决你的问题,请参考以下文章

汇编实验5

汇编语言实验5

实验2 汇编源程序编写与汇编调试

汇编语言实验5

汇编实验四

汇编语言程序设计实验报告四