. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->综合研究
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  printf函数接受不定数量的参数中的问题  [待解决] 回复[ 3次 ]   点击[ 681次 ]  
kid0713
[帖 主]   [ 发表时间:2009-07-08 13:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-13 07:29
查看了这个函数的汇编码,有些不理解,希望你们帮我提示一下
main(){
 printf("%d%c%s",61,'a',"AB",'c');
}

这个函数的汇编码是:
-u 1fa
13D9:01FA 55            PUSH    BP
13D9:01FB 8BEC          MOV     BP,SP
13D9:01FD B86300        MOV     AX,0063
13D9:0200 50            PUSH    AX
13D9:0201 B89B01        MOV     AX,019B ;这个19b是字符串“AB”的什么啊
13D9:0204 50            PUSH    AX
13D9:0205 B86100        MOV     AX,0061
13D9:0208 50            PUSH    AX
13D9:0209 B83D00        MOV     AX,003D
13D9:020C 50            PUSH    AX
13D9:020D B89401        MOV     AX,0194还有这个是194是printf第一个参数的什么?地址还是ASCII
13D9:0210 50            PUSH    AX
13D9:0211 E8B908        CALL    0ACD
13D9:0214 83C40A        ADD     SP,+0A
13D9:0217 5D            POP     BP
13D9:0218 C3            RET
jcw2008
[第1楼]   [ 回复时间:2009-07-09 15:47 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2008-10-14 16:49
楼主有疑问的话,可以利用debug的查看内存数据功能来验证一下自己的猜测。
mess
[第2楼]   [ 回复时间:2009-07-14 11:03 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
13D9:0201 B89B01        MOV     AX,019B ;这个19b是字符串“AB”的什么啊 
--------------------
字符串“AB”应该是存在内存当中的,而找到它们只能靠段地址和偏移地址,难道说这个019BH是偏移地址?debug试试看...
assembly
[第3楼]   [ 回复时间:2009-09-01 08:46 ]   [引用]   [回复]   [ top ] 
荣誉值:245
信誉值:144
注册日期:2007-04-27 17:56
字符串的参数,最终传入的是该字符串的偏移地址。“AB”,"%d%c%s",都是字符串,另外,函数参数入栈的顺序是从右往左的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved