0
我试图写一个可重用的一些程序,打印x86汇编字符串:如何编写一个过程在x86程序集中打印字符串和换行符?
print_str
:打印0结尾的字符串print_nl
:打印一个换行符print_strnl
:打印0封端的字符串,那么一个换行符
print_str
工作正常,但由于某些原因,print_nl
和print_strnl
都进入一个无限LO运。
这里是我的代码的输出:
;
; String handling
;
code segment para public 'CODE'
assume cs:code ds:data ss:stack es:nothing
main proc far
push ds
xor ax, ax
push ax
mov ax, data
mov ds, ax
mov si, offset t_something
cld
call print_nl
ret
main endp
;
; Print a 0-terminated string
;
; Parameters:
; - SI: the offset of the string
;
print_str proc
print_str_start:
lodsb
cmp al, 0
je print_str_end
mov ah, 14
int 10h
jmp print_str_start
print_str_end:
ret
print_str endp
;
; Print a newline character
;
print_nl proc
mov si, offset t_newline
cld
call print_str
print_nl endp
;
; Print a 0-terminated string, then a newline character
;
; Parameters:
; - SI: the offset of the string
;
print_strnl proc
call print_str
call print_nl
print_strnl endp
data segment para public 'DATA'
t_newline db 13, 10, 0
t_something db 'SOMETHING', 0
data ends
stack segment para stack
dw 100 DUP (?)
stack ends
end main
输出:
SOMETHING
SOMETHING
SOMETHING
SOMETHING
SOMETHING
SOMETHING
SOMETHING
(...) - infinite loop
能否请您解释一下是什么问题?
谢谢,它现在可行!顺便说一句,你不是*杰斯特? (我曾在匈牙利的一位前同事使用过相同的绰号) –