新人来了,我已经有一个问题了。
我正在修改 Jeff Duntemann 汇编书中使用的示例代码,并且我想将存储在数据寄存器中的整数值打印到终端?
下面的代码所做的是它可以打印出字符串,可以在 ECX 中推送值,但是当它到达以下内容时:
pop ecx
mov eax,4
mov ebx,1
mov edx, ecx
int 80h
它不会在终端上显示 edx 的内容,尽管我想我是用 mov eax,4 等告诉它的。
谁能给我任何“指针”(双关语)?
参考代码(自 2012 年 6 月 17 日起修订):
SECTION .data
submessage: db "I am subtracting 5 from 10!", 10
msglen: equ $-submessage
ansmsg: db "Answer is:", 10
msglen2: equ $-ansmsg
EOL: db 10
SECTION .bss
msg: resd 2 ; reserve space for 2 dwords
SECTION .text
global _start
_start: nop
;Displays test on shell
mov eax,4 ;print to terminal
mov ebx,1
mov ecx, submessage
mov edx, msglen
int 80h ;"I am subtracting 5 from 10!"
mov eax,4 ;print to terminal
mov ebx,1
mov ecx, ansmsg
mov edx, msglen2
int 80h ;"Answer is..."
;Subtraction operation below:
mov edx, 10
sub edx, 5
mov [msg], edx ; store 5 in msg
; now we need to print msg to terminal
mov eax, 4 ;print to terminal
mov ebx, 1
mov dword [msg+1], 0xa ;helps prints something out!
;Encountered problem here= prints out 'Answe' instead of integer '5'
push dword 2 ; store size of msg
push dword [msg] ; push to stack contents of msg
int 80h
add esp, 3 ;clean stack (2 push calls *4)
int 80h
; I like labels :)
sys_exit: mov eax,1 ;exit status
mov ebx,0
int 80h
nop
PS-如果我的行缩进很糟糕,我想知道如何改进它;恕我直言,一旦您克服了最初的学习“驼峰”,学习大会就会变得更有吸引力:)