首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

哪位高手细致解释下面约10行代码啊(含call和ret),感谢感谢啊又要通宵奋战这10行代码了,求你细致点分析下

2012-03-21 
谁细致解释下面约10行代码啊(含call和ret),感谢感谢啊,又要通宵奋战这10行代码了,求你细致点分析下assume

谁细致解释下面约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指令,到头来你还是一无所成

热点排行