IT工作室 发表于 2013-7-7 21:54:50

王爽汇编第六章检测点第二题求解

下面的程序实现依次实现用内存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 21:54:51

本帖最后由 火麒麟 于 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:字单元中,依次循环。

tiying 发表于 2013-7-8 04:27:28

建议楼主如果想不明白的话 还是把前面所有的内容在看一遍吧自己解决了问题印象才深刻

lztx 发表于 2013-7-8 05:56:45

楼上正解,要自己多练多看多想才好

小号4 发表于 2013-7-8 16:56:36

路过,学习了~~~

IT工作室 发表于 2013-7-8 20:56:41

谢谢你谢谢

IT工作室 发表于 2013-7-8 21:33:31

真的很谢谢   

火麒麟 发表于 2013-7-9 08:24:34

呵呵,没事。{:1_1:}

猫咪也有理想 发表于 2013-7-9 23:42:54

楼上正解,刚刚也在纠结第二空怎么填。什么时候当作字看什么时候当作字节看总是分不清楚:(
页: [1]
查看完整版本: 王爽汇编第六章检测点第二题求解