这个实验开始的填空题我就不写了,想看的引入别人的文章:点击打开链接
解释一下三个填空题目的区别:
1和2的区别就是无论你的段申请够不够16个字节,计算机都会帮你直接申请够一行,也就是16个字节。
所以第2题最后一个填空题答案为((n/16)+1)*16 其中(n/16)就是判断你申请的有木有超过一行,因为会去掉小数,所以要加上1,最后乘回16就是答案
2和3的却别就是你定义的段在不同位置,他们开始的段地址也会不同
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 ax,a
mov ds,ax ;将ds指向a数据段
mov ax,b
mov ss,ax ;将ss指向b数据段
mov ax,c
mov es,ax ;es指向c的数据段
mov bx,0
mov cx,8
s0: mov ax,ds:[bx]
add ax,ss:[bx]
mov es:[bx],ax
inc bx
loop s0
mov ax,4c00h
int 21h
code ends
end start
只需要将a、b、c段分给三个不同的段寄存器,然后循环8次相加就行,注意的是要用寄存器来写入内存,不能直接写入。
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 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,a
mov ds,ax
mov bx,0
mov ax,b
mov ss,ax
mov sp,10h
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
分析:这个实验跟上一个实验是一样的想法,就是先定好段寄存器。然后push就ok了
本文介绍了汇编语言中内存分配与管理的基本概念,包括如何计算内存大小、段寄存器的使用以及通过循环进行数据处理的方法。此外,还详细说明了如何利用push指令实现数据逆序存储的技术细节。
522

被折叠的 条评论
为什么被折叠?



