BITS 16
ORG 0x0100
SECTION .text
MAIN:
mov DI,array
call GetString
call Putln
call PutString
call Putln
mov SI,array
;jmp Next
;Next:
mov AX,4C00H
;mov AL,00H
int 21H
%INCLUDE 'STDIO.ASM'
SECTION .data
mesg db 'I','h','a','t','e','a','s','s','e','m','b','l','y' ;
SECTION .bss
array resb 256 ;reserve 256 bytes of space
Putch: ;outputs character in DL
push DI
mov AH,02H
int 21H
pop DI
ret
Getch: ;inputs a character into AL
push DI
; mov BH,AH
mov AH,08H
int 21H
; mov AH,BH
mov DL,AL
pop DI
ret
Putln: ;prints out a new line
mov AH,02H
mov DL,CR
int 21H
mov DL,LF
int 21H
ret
GetString:
call Getch
cmp DL,0DH
je End
call Putch
stosb
jmp GetString
End:
mov AL,00H
stosb
ret
PutString:
cld
lodsb
cmp AL,00H
jz End1
mov DL,AL
call Putch
jmp PutString
End1:
ret
SECTION .data
;mesg db 'I',' ','h','a','t','e',' ','a','s','s','e','m','b','l','y' ;
CR equ 0AH
LF equ 0AH
我正在尝试从8086程序集中的数组输出一个字符串,但是当我运行它时,即使我可以输入字符,当我按Enter键时它给了我symblols。
答案 0 :(得分:2)
我认为您的数据段寄存器可能未正确设置。 当您在实模式下操作时,最好使用
启动程序mov ax,.data ; The way this is done can vary between assemblers
mov ds,ax
另外,只要我记得,DOS调用不是以零终止字符串运行,而是在末尾运行'$',所以原因可能是您没有按如下方式声明mesg
:< / p>
mesg db 'I love assembly!$'
(实际上,你似乎没有以任何方式终止字符串)