我正在使用NASM,IA-32(我想)。作业是从.txt文件中获取ASCII,并使用linux shell输入重定向以十六进制格式将其打印到控制台。我想我已经找到了ascii到hex部分,但是我很难让它正确打印控制台。我确定我只是遗漏了一些小而愚蠢的东西。我只是为了测试而阅读的文件是这样简单的: ABC 123 输出应该是: 41 42 43 0A 31 20 32 20 33 20
问题发生在
_hexOut:
我尝试过更多的东西,而不是我能适应这篇文章,我无法弄清楚我哪里出错了。 我得到的唯一输出是: 41 42 43
section .text
global _start
_start:
mov edx, inBuffSize ; sys_read
mov ecx, inBuffer ; -
mov ebx, 0x00 ; -
mov eax, 0x03 ; -
int 0x80 ; end sys_read
mov [inputLen], eax
cmp eax, 0
jle _exit
_inLeft:
mov ecx, [inCount] ; move
cmp ecx, [inputLen]
je _hexOut
movzx eax, byte [inBuffer + ecx]
mov [temp], al
shr al, 4
mov bl, 9
cmp al, bl
jle _leftIsNumber
mov bl, 10
cmp al, bl
jge _leftIsLetter
_leftIsNumber:
mov ecx, [outCount]
add al, 48
mov [outBuffer + ecx], al
mov ecx, [outCount]
inc ecx
mov [outCount], ecx
jmp _inRight
_leftIsLetter:
mov ecx, [outCount]
add al, 55
mov [outBuffer + ecx], al
mov ecx, [outCount]
inc ecx
mov [outCount], ecx
jmp _inRight
_inRight:
mov ecx, [inCount]
inc ecx
mov [inCount], ecx
movzx eax, byte [temp]
and al, 0x0F
mov bl, 9
cmp al, bl
jle _rightIsNumber
mov bl, 10
cmp al, bl
jge _rightIsLetter
_rightIsNumber:
mov ecx, [outCount]
add al, 48
mov [outBuffer + ecx], al
mov ecx, [outCount]
inc ecx
mov [outBuffer + ecx], byte 32
inc ecx
mov [outCount], ecx
jmp _inLeft
_rightIsLetter:
mov ecx, [outCount]
add al, 55
mov [outBuffer + ecx], al
mov ecx, [outCount]
inc ecx
mov [outBuffer + ecx], byte 32
inc ecx
mov [outCount], ecx
jmp _inLeft
_hexOut:;------------------ PROBLEMS HERE ----------------------
; mov ecx, [inputLen]
; mov [outCount + ecx], byte 0x0A
; inc ecx
; mov [inputLen], ecx
mov edx, [inputLen]
mov ecx, outBuffer
mov ebx, 0x01
mov eax, 0x04
int 0x80
;------------------------------------------------------
_exit:
mov ebx, 0
mov eax, 1
int 0x80
section .data
section .bss
inBuffer resb inBuffSize
outBuffer resb outBuffSize
inBuffSize equ 200
outBuffSize equ 600
inCount resd 1
outCount resd 1
temp resb 1
inputLen resd 1
问题的第二部分是我需要能够改变控制台中每行显示的十六进制字节数,但是在我解决第一个问题之前,我无法解决这个问题。任何朝着正确方向的推动都会受到赞赏!