Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么代码可以在汇编语言中回显字符?_Assembly_X86 - Fatal编程技术网

Assembly 什么代码可以在汇编语言中回显字符?

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

下面的代码确实成功地组装、构建和运行了,但它没有做任何事情,所以我希望它输出一个从键盘输入的字符,并将其显示在屏幕上。我该怎么做?我尝试了不同的代码行,并在网上查找,但什么也找不到

我仍在学习asm,因此任何帮助或建议都将不胜感激

        ;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。可能有一些多余的代码在那里,但它的工作。谢谢你的帮助。很遗憾,我不能投票支持你的答案,因为我没有任何代表点了,对不起。