繁体   English   中英

emu8086组件输入输出,三个字符

[英]emu8086 Assembly Input output with three characters

大家好,我是该语言的新手,这是我修改的代码,应接受输入ABC并返回ABC,但它返回ABB。 我用AH,BH和Ax,Bx尝试过,情况变得更糟。 我该如何修改(目前,我们的老师希望我们坚持使用MOV,INT,LEA以及此处代码中的内容)。 感谢您的提示和答案

.MODEL SMALL
    .STACK 100H
    .CODE
     MOV AH, 01H ; Character input with echo
     INT 21H ; Character in AL
     MOV BL, AL ; Save in BL    

     MOV AH, 01H ; Character input with echo
     INT 21H ; Character in AL
     MOV CL, AL ; Save in CL

     MOV AH, 01H ; Character input with echo
     INT 21H ; Character in AL
     MOV DL, AL ; Save in DL

     MOV AH, 02H ; Display character function    

     MOV DL, 0DH ; carriage return
     INT 21H

     MOV DL, 0AH ; line feed
     INT 21H  

     MOV DL, BL ; Get character stored in BL and display
     INT 21H   
     MOV DL, CL ; Get character stored in CL and display
     INT 21H  
     MOV DL, DL ; Get character stored in DL and display
     INT 21H  

     MOV AH, 4CH
     INT 21H
     END

在第14行,您将第三个字符保存在DL中,但是稍后,通过将ODH和OAH分配给DL会丢失此值。 解决方法很简单:将第三个字符而不是DL存储在另一个寄存器中,例如CH,在底部显示CH而不是DL(箭头<=============指向变化) :

.MODEL SMALL
    .STACK 100H
    .CODE
     MOV AH, 01H ; Character input with echo
     INT 21H ; Character in AL
     MOV BL, AL ; Save in BL    

     MOV AH, 01H ; Character input with echo
     INT 21H ; Character in AL
     MOV CL, AL ; Save in CL

     MOV AH, 01H ; Character input with echo
     INT 21H ; Character in AL
;    MOV DL, AL ; Save in DL
     MOV CH, AL ; <============================

     MOV AH, 02H ; Display character function    

     MOV DL, 0DH ; carriage return
     INT 21H

     MOV DL, 0AH ; line feed
     INT 21H  

     MOV DL, BL ; Get character stored in BL and display
     INT 21H   
     MOV DL, CL ; Get character stored in BL and display
     INT 21H  
;    MOV DL, DL ; Get character stored in BL and display
     MOV DL, CH ; <============================
     INT 21H  

     MOV AH, 4CH
     INT 21H
     END

我选择CH是因为它是代码中未使用的寄存器。

有更有效的方法

主要程序

MOV BH,0
MOV BL,10D


   INPUT:
   MOV AH,1
   INT 21H
   CMP AL,13D
   JNE NUMBER 

   JMP EXIT


   NUMBER:
   SUB AL,30H
   MOV CL,AL
   MOV AL,BH
   MUL BL
   ADD AL,CL
   MOV BH,AL

   JMP INPUT

EXIT:

   AND AX,0
   MOV AL,BH
   MOV CL,10D

   MOV BX,0000H    

   STORE:
   DIV CL
   MOV [0000H+BX],AH
   ADD BX,2H
   MOV AH,0
   CMP AL,0
   JNE STORE

   MOV AH,2
   MOV  DL,0DH
   INT 21H
   MOV DL,0AH
   INT 21H

   PRINT: 
   SUB BX,2H
   MOV DL,[0000H+BX]
   ADD DL,30H
   INT 21H
   CMP BX,0
   JNE PRINT



MAIN ENDP

结束主

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM