读书人

哪位高手细致解释下面约10行代码啊(含

发布时间: 2012-03-21 13:33:14 作者: rapoo

谁细致解释下面约10行代码啊(含call和ret),感谢感谢啊,又要通宵奋战这10行代码了,求你细致点分析下
assume cs:code
code segment
start:mov ax,1
mov cx,3
call s
mov bx,ax;(bx) = ?
mov ax,4c00h
int 21h
s: add ax,ax
loop s
ret
code ends
end start


[解决办法]
ax,cx分别置1,3。调用s例程,进入s,add ax ax就是ax乘以2倍。又cx为3,所以loop循环3次,总共乘以8倍,ret从s例程返回,跳至mov bx,ax ;(bx) = 8,mov ax,4c00h int 21h中断功能号ah=4c,返回码al=0,中断功能返回dos

[解决办法]
建议你调试一下,这样应该比较快
[解决办法]
1 为什么cx意味着循环次数
因为LOOP指令需要CX,每执行loop一次,就自动减CX 1
2 为什么 返回al
因为需要使用21号中断,所以需要ah和al来传达你的参数,类似调用API那样
3 返回和ret有什么关系呢
call会把下一条指令压栈,而ret则把栈的数据当作地址来跳转
[解决办法]

探讨

引用:
ax,cx分别置1,3。调用s例程,进入s,add ax ax就是ax乘以2倍。又cx为3,所以loop循环3次,总共乘以8倍,ret从s例程返回,跳至mov bx,ax ;(bx) = 8,mov ax,4c00h int 21h中断功能号ah=4c,返回码al=0,中断功能返回dos

我想问3个问题:
1 为什么cx意味着循环次数
2 ……

[解决办法]
Assembly code
assume cs:codecode segmentstart: mov ax,1    ;ax=1mov cx,3      ;现在CX等于3  call s      ;跳转到s标号处mov bx,ax ;(bx) = ?      ;把8复制给BX  mov ax,4c00h       结束啦...  int 21h  s: add ax,ax    ;call到这里来后ax+ax=2  loop s        ;连续循环3次,ax=8,跳到call s的下一条指令retcode endsend start
[解决办法]
晕,你连loop循环都不知道就学call、ret指令,到头来你还是一无所成

读书人网 >汇编语言

热点推荐