80x86汇编语言编程:三个数字进行比较

来源:互联网 发布:电子表格相同数据排序 编辑:程序博客网 时间:2024/06/05 14:37

用汇编语言编写一个程序,从键盘接受三个10进制数(0到9,输入其它符号则输出错误提示)。


把三个数字进行比较,三个数都不相等显示0,三个数中有两个不相等显示1,三个数都相等显示2。


按照题目要求,做而论道编写的程序如下,已经调试成功:


ASSUME CS:CODE, DS:DATA


;------------------------------------------------------

DATA SEGMENT

    MSG1     DB  10, 13, ' INPUT (0 ~ 9): ', '$'

    ERR_TIP  DB  10, 13, ' INPUT  ERROR .', 10, 13, '$'

    I_BUFF   DB  ?, ?, ? 

    O_MSG    DB  10, 13, 10, 13, ' THE OUT IS: '

    O_BUFF   DB  ?, 10, 13, '$'

DATA ENDS

;------------------------------------------------------

CODE SEGMENT

BEGIN:

    MOV   AX, DATA

    MOV   DS, AX

    LEA   BX, I_BUFF

    MOV   CX, 3    ;输入三次

LOP:

    LEA   DX, MSG1

    MOV   AH, 9

    INT   21H

    MOV   AH, 1

    INT   21H

    CMP   AL, '0'

    JB    EEE

    CMP   AL, '9'

    JA    EEE

    MOV   [BX], AL

    INC   BX

    LOOP  LOP

    JMP   PROG    ;输入结束,转去比较

EEE:

    LEA   DX, ERR_TIP

    MOV   AH, 9

    INT   21H

    JMP   LOP

;------------------------------------------------------


;三个数都不相等显示0;

;三个数中有两个不相等显示1;

;三个数都相等显示2。


PROG:

    LEA   BX, I_BUFF

    MOV   AL, [BX + 0]

    CMP   AL, [BX + 1]

    JZ    EQU_0_1

    CMP   AL, [BX + 2]

    JZ    EQU_0_2

    MOV   AL, [BX + 1]

    CMP   AL, [BX + 2]

    JZ    EQU_1_2

N_EQU:

    MOV   O_BUFF, '0'

    JMP   DISP

;----------------------

EQU_0_1:

    CMP   AL, [BX + 2]

    JZ    ALL_EQU

    MOV   AL, [BX + 1]

    CMP   AL, [BX + 2]

    JZ    ALL_EQU

;----------------------

EQU_0_2:

EQU_1_2:

    MOV   O_BUFF, '1'

    JMP   DISP

;----------------------

ALL_EQU:

    MOV   O_BUFF, '2'

DISP:                           ;比较结束,下面是显示结果

    LEA   DX, O_MSG

    MOV   AH, 9

    INT   21H

;----------------------

    MOV   AH, 4CH

    INT   21H

CODE ENDS

    END   BEGIN

;------------------------------------------------------


程序经过编译、连接后,执行时,显示如下:


c:\masm510>NNN


 INPUT (0 ~ 9): 3

 INPUT (0 ~ 9): 3

 INPUT (0 ~ 9): 3


 THE OUT IS: 2


c:\masm510>NNN


 INPUT (0 ~ 9): 3

 INPUT (0 ~ 9): 5

 INPUT (0 ~ 9): 6


 THE OUT IS: 0


c:\masm510>NNN


 INPUT (0 ~ 9): 3

 INPUT (0 ~ 9): 6

 INPUT (0 ~ 9): 3


 THE OUT IS: 1


c:\masm510>NNN


 INPUT (0 ~ 9): 5

 INPUT (0 ~ 9): 8

 INPUT (0 ~ 9): 8


 THE OUT IS: 1


c:\masm510>NNN


 INPUT (0 ~ 9): 2

 INPUT (0 ~ 9): 2

 INPUT (0 ~ 9): 0


 THE OUT IS: 1


c:\masm510>


0 0