标题:小白求助如何打印变量值
只看楼主
batsom
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-9-20
结帖率:100%
已结贴  问题点数:20 回复次数:7 
小白求助如何打印变量值
section .data
massage:   dw "1+2+...+100="
Len: equ $ - massage
valueToPrint: db 0

;section .bss
 ;valueToPrint: resb 4

section .text
global main

main:
   mov ebp, esp; for correct debugging
   mov eax,0
   mov ebx,0
   mov ecx,100
s:
   add ebx,1
   add eax,ebx
   loop s

;push eax

;sub eax,5H
;add eax,48H
mov [valueToPrint],eax

mov eax,4 ; 4号调用 sys_write的系统调用
mov ebx,1 ; ebx送1表示输出,参数1,文件描述符,stdout是1
mov ecx,massage ; 字符串的首地址送入ecx
mov edx,Len ; 字符串的长度送入edx
int 80h ; 输出字串

mov eax,4
mov ebx,1
mov ecx,valueToPrint
mov edx,4
int 0x80


mov ebx,0
mov eax,1
int 0x80
搜索更多相关主题的帖子: add mov 打印 变量值 int 
2021-09-20 15:07
batsom
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-9-20
得分:0 
唉!换了个方式:

section .data
massage:   dw "1+2+...+100=%d"

;section .bss
; valueToPrint: resb 4

section .text

global main
extern printf
extern exit

main:
   mov ebp, esp; for correct debugging
   mov eax,0
   mov ebx,0
   mov ecx,1000
s:
   add ebx,1
   add eax,ebx
   loop s

push eax
push massage
call printf

push  0
call exit     ; exit(0)
2021-09-20 19:00
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:2 
null

[此贴子已经被作者于2021-11-4 18:06编辑过]

2021-09-20 20:02
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:2 
null

[此贴子已经被作者于2021-11-4 18:07编辑过]

2021-09-20 20:06
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:4 
null

[此贴子已经被作者于2021-11-4 18:08编辑过]

2021-09-20 20:16
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:4 
null

[此贴子已经被作者于2021-11-4 18:09编辑过]

2021-09-20 21:52
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:4 
null

[此贴子已经被作者于2021-11-4 18:09编辑过]

2021-09-20 22:02
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:4 
可以换个思路,就是直接吧变量换成字符串,连结原来的字符串一拼输出

massage:   db "1+2+...+100="
valueToPrint: db 0,0,0,0,0
Len: equ $ - massage

...
...
 ;以下用除10取余法,由值转换字串

程序代码:

 mov edi,valueToPrint    ;变量字符地址
 mov ecx,0     ;清0
 mov ebx,10     ;除法准备
x1:

 mov edx,0     ;清0
 div ebx     ;eax /10 ,若1234 ,除10后,dl得余数4,
 push edx     ;保存, eax=1234,依次保存4,3,2,1
 inc ecx     ;累加个数
 or eax,eax     ;是否已除尽
 jnz x1     ;不是,再除
x2:

 pop eax      ;后入先出,先印出第一数,然后第二....
 or al,30h     ;转ascii
 stosb         ;存入字串缓冲es:edi
 loop ax2     ;下一个

; 到此valueToPrint就已是变量字符串,再系统调用输出massage字串
...
...
2021-09-22 05:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506925-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.193193 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved