实验5(5)(6)以及相关问题
5.(5)程序:
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,c
mov ss,ax
mov sp,10h
mov dx,0
mov bx,0
mov cx,8
s:mov ax,a
mov ds,ax
push ds:
mov ax,b
mov ds,ax
pop dx
add dl,ds:
push dx
pop ss:
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
程序逻辑:
题目要求将a,b相加的结果依次放入c中
将c作为栈段处理。
先将a中的【bx】处数据进栈,然后出栈放入dx中(当然,也可以省去进栈直接将其放入dx中)。
然后将ds换到b数据段。dx中的数据与ds:【bx】相加,这时候dx中存储着得到的a,b对应中数据之和,接下来就是想办法将其放入c中(栈段也可以同时被当作数据段来存储数据,但要注意数据是否会被覆盖,因为这个程序仅仅需要用到靠近栈底的一个字的空间来临时存储进出栈的数据,所以完全可以将其余未用到的存储单元当作数据段处理)
将dx入栈
出栈到ss:
(6)
程序:
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,0,0,0,0,0,0,0,0
b ends
code segment
start:mov ax,b
mov ss,ax
mov sp,020h
mov ax,a
mov ds,ax
mov bx,0
mov cx,16
s:push
add bx,2
loop s
mov ax,4c00h
int21h
code ends
end start
很不错,就是题目要求a段前 八个字,mov sp,020h,mov cx,16中的020h和16应该要调整。
页:
[1]