0
下面的代码:英特尔的x86的Linux大会SYS_WRITE + SYS_READ
section .bss
name: resb 50
section .text
global _start
_start:
PUSH EBP
MOV EBP, ESP
MOV EDX, len
MOV ECX, msg
MOV EBX, 1
MOV EAX, 4
INT 0x80
MOV EDX, 50
MOV ECX, name
MOV EBX, 0
MOV EAX, 3
INT 0x80
MOV EBX, 1
MOV EAX, 4
INT 0x80
MOV EDX, cm
MOV ECX, ex
MOV EBX, 1
MOV EAX, 4
INT 0x80
MOV EBX, 0
MOV EAX, 1
INT 0x80
section .data
msg db 'Hello!',0xa
ex db '!',0xa
len equ $ - msg
cm equ $ - ex
我打算做的是印刷Hello!
一个简单的I/O程序,要了char和将打印%c!
。
输入是|
和输出是:
,我得到如下:
:Hello!
:!
|4
:4
:!
如何让这个它返回以下
:Hello!
|4
:4!
我几年没有编写任何程序集,但是最后那些'equ's看起来像是要测量字符串 - 所以'len'应该在msg后面。 –
请你可以添加评论到你的代码?即使只是对每个系统调用发表评论,都会使其更容易阅读。 – user9876
您是否正在调用read()系统调用来读取文本?那会返回“4 \ n”,而不仅仅是“4”。我想你会在不删除“\ n”的情况下打印出来,这就是为什么“4”和“!”之间有一个换行符。但是我对你的代码做了一些猜测:-) – user9876