王爽汇编第六章检测点第二题求解
下面的程序实现依次实现用内存0:0~0:15 单元中的内容改写程序中的数据,数据的传送用栈来进行,栈空间设置在程序内,完成程序:assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0
start:
mov ax,__
mov ss,ax
mov sp,__
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:
push
________
add bx,2
loop s
mov ax,4c00h
int 21h
codeends
end start
求解 希望前辈能详细说下 谢谢
本帖最后由 火麒麟 于 2013-7-7 23:22 编辑
start:mov ax,cs
mov ss,ax
mov sp,24h
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:push
pop cs:
add bx,2
loop s
mov ax,4c00h
int 21h
首先,第一处填CS,因为源程序中栈段和数据段均在代码段内通过定义字型数据给出,因此栈段的段地址就是代码段的段地址,在CS寄存器中。
第二处填24H,因为定义的栈段共有10个字,20个字节,偏移地址从10H—23H(在栈段前有8个字型数据,这八个字型数据的偏移地址从0—F),因此在入栈之前栈为空,SS:SP指向栈中最底部单元的下一个单元,即偏移地址为24H的内存单元。
第三处填pop cs:,因为当0:0字单元中的内容入栈后,执行pop cs:,就使得当前栈中的元素出栈到cs:字单元中,依次循环。
建议楼主如果想不明白的话 还是把前面所有的内容在看一遍吧自己解决了问题印象才深刻 楼上正解,要自己多练多看多想才好 路过,学习了~~~ 谢谢你谢谢 真的很谢谢 呵呵,没事。{:1_1:} 楼上正解,刚刚也在纠结第二空怎么填。什么时候当作字看什么时候当作字节看总是分不清楚:(
页:
[1]