Assembly 什么代码可以在汇编语言中回显字符?
下面的代码确实成功地组装、构建和运行了,但它没有做任何事情,所以我希望它输出一个从键盘输入的字符,并将其显示在屏幕上。我该怎么做?我尝试了不同的代码行,并在网上查找,但什么也找不到 我仍在学习asm,因此任何帮助或建议都将不胜感激Assembly 什么代码可以在汇编语言中回显字符?,assembly,x86,Assembly,X86,下面的代码确实成功地组装、构建和运行了,但它没有做任何事情,所以我希望它输出一个从键盘输入的字符,并将其显示在屏幕上。我该怎么做?我尝试了不同的代码行,并在网上查找,但什么也找不到 我仍在学习asm,因此任何帮助或建议都将不胜感激 ;NASM-IDE ASM Assistant Assembler Project File ;BITS 16 ;Set code generation to 16 bit mode ;ORG 0x0100 ;Set co
;NASM-IDE ASM Assistant Assembler Project File
;BITS 16 ;Set code generation to 16 bit mode
;ORG 0x0100 ;Set code start address to 0100h
SEGMENT .text ;Main code segment
PUTCH:
PUSH AX
MOV AH, 2H
INT 21H
POP AX
ret
GETCH:
PUSH BX
MOV BH, AH
MOV AH, 08H
INT 21H
MOV AH, BH
POP BX
ret
PUTLINE:
PUSH AX
PUSH BX
MOV AH, 004CH
INT 21H
POP AX
POP BX
ret
SEGMENT .data ;Initialised data segment
SEGMENT .bss ;Uninitialised data segment
看起来您只有3个过程:putch、getch和putline。但没有“主要”程序。这就是为什么你看不到任何输出 如果在开头(在“PUTCH:”之前)添加以下代码,可以让它从键盘读取字符,然后将其回显到标准输出,然后终止程序
XOR AX,AX ; clear AX
call GETCH ; read a char into AL
call PUTCH ; print the char from AL
MOV AX, 4C00h
INT 21h ; exit with code 0
莫夫啊,01
int 21h
);此服务接受字符,对其进行回音,并将其存储到al
int 21h
是实模式DOS调用。你在那种环境下跑步吗?是的。我正在用DOSBOX和nasmide,如果有帮助的话?谢谢你的回复,DX。我不知道STDOUT是什么,但我使用了代码,它与以前没有任何不同。我可以按任意字符,但它告诉我按另一个字符继续。当我这样做时,没有任何输出,程序返回到上一个屏幕。我是否需要使用另一个寄存器并移动它,或者调用putline?STDOUT表示控制台/屏幕。根据您的描述,看起来您是从IDE运行该程序。当程序终止时,它要求您按另一个键返回IDE。要尝试的一件事是两次“调用GETCH;调用PUTCH”。如果程序在请求返回IDE之前读取了两个键,那么您就知道它正在正确执行。然后,您可以调试GETCH的返回值(AL),以确定问题是出在GETCH还是PUTCH上。我必须调用GETCH,将AL移动到DL中,并调用所有3个子例程(PUTCH,PUTLINE,GETCH),然后再次移动寄存器,并在退出之前再次调用PUTCH。可能有一些多余的代码在那里,但它的工作。谢谢你的帮助。很遗憾,我不能投票支持你的答案,因为我没有任何代表点了,对不起。