注册 登录
编程论坛 汇编论坛

小白求助如何打印变量值

batsom 发布于 2021-09-20 15:07, 7534 次点击
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
7 回复
#2
batsom2021-09-20 19:00
唉!换了个方式:

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)
#3
自由而无用2021-09-20 20:02
null

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

#4
自由而无用2021-09-20 20:06
null

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

#5
自由而无用2021-09-20 20:16
null

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

#6
自由而无用2021-09-20 21:52
null

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

#7
自由而无用2021-09-20 22:02
null

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

#8
Valenciax2021-09-22 05:58
可以换个思路,就是直接吧变量换成字符串,连结原来的字符串一拼输出

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字串
...
...
1