如何在汇编语言中添加两个二进制数? [英] how to add two binary numbers in Assembly language?

查看:178
本文介绍了如何在汇编语言中添加两个二进制数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我正在编写一个程序,提示用户输入两个最多8位的二进制数,并在二进制的下一行打印它们的总和。如果用户输入非法字符,则应提示他或她再次开始。每个输入都以回车结束。我想知道如何添加检查,以便如果用户输入0和1之外,他应该被提示有关错误的数字。

这是我的程序:



Hi,
i'm writing a program that prompts the user to enter two binary numbers of up to 8 digits each, and print their sum on the next line in binary. If the user enters an illegal character, he or she should be prompted to begin again. Each input ends with a carriage return. i wanna know how to add check so that if user enter other than 0 and 1 he should be prompted about wrong digit.
here is my program:

.MODEL SMALL
.STACK 100H

.DATA
   PROMPT_1  DB  0DH,0AH,'Enter the first binary number ( max 8-digits ) : $'
   PROMPT_2  DB  0DH,0AH,'Enter the second binary number ( max 8-digits ) : $'
   PROMPT_3  DB  0DH,0AH,'The SUM of given binary numbers in binary form is : $'
   ILLEGAL   DB  0DH,0AH,'Illegal character. Try again.$'

.CODE
   MAIN PROC
     MOV AX, @DATA                ; initialize DS
     MOV DS, AX

     @START_2:                    ; jump label
       XOR BX, BX                 ; clear BX

       LEA DX, PROMPT_1           ; load and display the string PROMPT_1
       MOV AH, 9
       INT 21H

       MOV CX, 8                  ; initialize loop counter
       MOV AH, 1                  ; set input function

       @LOOP_1:                   ; loop label

         INT 21H                  ; read a character

         CMP AL, 0DH              ; compare AL with CR
         JNE @SKIP_1              ; jump to label @SKIP_1 if AL!=0DH
         JMP @EXIT_LOOP_1         ; jump to label @EXIT_LOOP_1

         @SKIP_1:                 ; jump label
           AND AL, 0FH            ; convert ascii into decimal code
           SHL BL, 1              ; shift BL towards left by 1 position
           OR BL, AL              ; set the LSB of BL with LASB of AL
       LOOP @LOOP_1               ; jump to label @LOOP_1 if CX!=0

       @EXIT_LOOP_1:              ; jump label

       LEA DX, PROMPT_2           ; load and display the string PROMPT_2
       MOV AH, 9
       INT 21H

       MOV CX, 8                  ; initialize loop counter
       MOV AH, 1                  ; set input function

       @LOOP_2:                   ; loop label
         INT 21H                  ; read a character

         CMP AL, 0DH              ; compare AL with CR
         JNE @SKIP_2              ; jump to label @SKIP_2 if AL!=0DH
         JMP @EXIT_LOOP_2         ; jump to label @EXIT_LOOP_2

         @SKIP_2:                 ; jump label
           AND AL, 0FH            ; convert ascii into decimal code
           SHL BH, 1              ; shift BH towards left by 1 position
           OR BH, AL              ; set the LSB of BH with LASB of AL
       LOOP @LOOP_2               ; jump to label @LOOP_2 if CX!=0

       @EXIT_LOOP_2:              ; jump label

       LEA DX, PROMPT_3           ; load and display the string PROMPT_3
       MOV AH, 9
       INT 21H

       ADD BL, BH                 ; add BL and BH
       JNC @SKIP                  ; jump to label @SKIP if CF=1
         MOV AH, 2                ; print the digit 1 i.e. carry
         MOV DL, 31H
         INT 21H

       @SKIP:                     ; jump label

       MOV CX, 8                  ; initialize loop counter
       MOV AH, 2                  ; set output function

       @LOOP_3:                   ; loop label
         SHL BL, 1                ; shift BL towards left by 1 position
         JC @ONE                  ; jump to label @ONE if CF=1
         MOV DL, 30H              ; set DL=0
         JMP @DISPLAY             ; jump to label @DISPLAY

         @ONE:                    ; jump label
           MOV DL, 31H            ; set DL=1

         @DISPLAY:                ; jump label
           INT 21H                ; print the character
       LOOP @LOOP_3               ; jump to label @LOOP_3 if CX!=0

     MOV AH, 4CH                  ; return control to DOS
     INT 21H
   MAIN ENDP
 END MAIN

推荐答案

'
PROMPT_2 DB 0DH,0AH,'输入第二个二进制数(最多8位):
' PROMPT_2 DB 0DH,0AH,'Enter the second binary number ( max 8-digits ) :


'
PROMPT_3 DB 0DH,0AH,'二进制形式的给定二进制数的和为:
' PROMPT_3 DB 0DH,0AH,'The SUM of given binary numbers in binary form is :


'
ILLEGAL DB 0DH,0AH,'非法人物。再试一次。
' ILLEGAL DB 0DH,0AH,'Illegal character. Try again.


这篇关于如何在汇编语言中添加两个二进制数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆