第五章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 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测试 :(不是你想要的请PM我 本帖最后由 G0398 于 2012-3-16 14:31 编辑
{:5_109:}{:5_109:}{:5_109:} yezlei 发表于 2012-3-16 14:14 static/image/common/back.gif
不是你想要的请PM我
我也编出了你那段代码,就是不明白为什么 用出栈就不行了。。就是用POP把 FFFF里的数据先出栈到AX中,然后AX的数据加上DX。 本帖最后由 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 {:1_1:}我也是初学,哪里说的不对的对方请指正,互相学习进步 我昨天才接触这个!! 现在还不懂!! 我会加油的!!你也是哦{:5_105:} Fan.晓娅 发表于 2012-3-17 00:31 static/image/common/back.gif
我昨天才接触这个!! 现在还不懂!! 我会加油的!!你也是哦
晓娅看来是个热心的学习者啊!(⊙o⊙) :D你的是 mov ax,0ffffh
mov ss,ax
mov sp,0
sp指针貌似给错地址了 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呀~你觉得内~ 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]