我试图编写一些可重用的程序来在x86程序集中打印字符串:
print_str
:打印以0结尾的字符串print_nl
:打印换行符print_strnl
:打印以0结尾的字符串,然后输出换行符 print_str
工作正常,但出于某种原因,print_nl
和print_strnl
都会进入无限循环。
这是我的代码输出:
;
; 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
你能解释一下问题是什么吗?
答案 0 :(得分:1)
确保nav {
width:100%; <<<< will resize to the max available width
height:40px;
font-family: Arial;
margin: 0 0 10px 0;
list-style: none;
background-color: #000033;
}
实际为您添加endp
。如果它没有,请自己添加。或者,您可以使用ret
作为最终通话说明,例如:
jmp