不会编汇编 发表于 2012-3-16 12:58:36

第五章LOOP的时候我编了个汇编程序,谁能解释下,错在哪啊~

本帖最后由 不会编汇编 于 2012-3-17 13:34 编辑

其实程序很简单,就是把FFFF:0~FFFF:B的数据以字型累加到DX中

assume cs:code

code segment

start:      mov ax,0ffffh
      mov ss,ax
      mov sp,0
      mov ax,0
      mov dx,0
      mov cx,6h
s:      pop ax
      add dx,ax   ;DEBUG单步执行到这里就会显示Program terminated normally百思不得其解
      loop s
               
      mov ax,4c00h
      int 21h

code ends
end start

yezlei 发表于 2012-3-16 14:13:23

assume cs:code
code segment
strat:        mov ax,0ffffh
                mov ds,ax
                mov ax,0
                mov bx,0
                mov cx,5
        s:        add dx,ds:
                inc bx
                inc bx
                loop s
                mov ax,4c00h
                int 21h
code ends
end strat               

看看符合你的要求不,代码经过DEBUG测试

yezlei 发表于 2012-3-16 14:14:25

:(不是你想要的请PM我

G0398 发表于 2012-3-16 14:30:38

本帖最后由 G0398 于 2012-3-16 14:31 编辑

{:5_109:}{:5_109:}{:5_109:}

不会编汇编 发表于 2012-3-16 14:38:43

yezlei 发表于 2012-3-16 14:14 static/image/common/back.gif
不是你想要的请PM我

我也编出了你那段代码,就是不明白为什么 用出栈就不行了。。就是用POP把 FFFF里的数据先出栈到AX中,然后AX的数据加上DX。

yezlei 发表于 2012-3-16 14:50:56

本帖最后由 yezlei 于 2012-3-16 14:57 编辑

assume cs:code

code segment

start: mov ax,0ffffh
         mov ss,ax
         mov sp,000EH;问题出在栈的偏移上,你忽略了这个,你给SS栈段赋值后,直接POP 取值,需要把SP指向栈顶
         mov ax,0
         mov dx,0
         mov cx,6h;这里循环了7次,0-6一共7次,所以SP指向应该是2*7=14=000EH
s:      pop ax
         add dx,ax   
         loop s
               
         mov ax,4c00h
         int 21h

code ends
end start

yezlei 发表于 2012-3-16 14:56:06

{:1_1:}我也是初学,哪里说的不对的对方请指正,互相学习进步

Fan.晓娅 发表于 2012-3-17 00:31:20

我昨天才接触这个!! 现在还不懂!! 我会加油的!!你也是哦{:5_105:}

谢青源 发表于 2012-3-17 03:28:43

Fan.晓娅 发表于 2012-3-17 00:31 static/image/common/back.gif
我昨天才接触这个!! 现在还不懂!! 我会加油的!!你也是哦

晓娅看来是个热心的学习者啊!(⊙o⊙)

乱闯 发表于 2012-3-17 11:22:35

:D你的是       mov ax,0ffffh
      mov ss,ax
      mov sp,0
sp指针貌似给错地址了

不会编汇编 发表于 2012-3-17 13:31:07

Root`s_Dream 发表于 2012-3-17 11:22 static/image/common/back.gif
你的是       mov ax,0ffffh
      mov ss,ax
      mov sp,0


你想啊,是从FFFFH 的第一个数开始往外POP 也就是SP,0 然后 POP出一个数据POP+2,以此类推,一直到B呀~你觉得内~

不会编汇编 发表于 2012-3-17 13:34:07

Root`s_Dream 发表于 2012-3-17 11:22 static/image/common/back.gif
你的是       mov ax,0ffffh
      mov ss,ax
      mov sp,0


我好像大概明白了, 应该是因为这段内存虽说设置成为了一段SS。 可是如果没有往里边PUSH东西的话它不会往外POP东西。所以,这个程序不对吧~ 应该是这样{:2_33:}
页: [1]
查看完整版本: 第五章LOOP的时候我编了个汇编程序,谁能解释下,错在哪啊~