欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编实验三

程序员文章站 2022-06-17 11:50:13
...

汇编实验三

问题

给出三个有符号数,编写一个比较相等关系的程序:
(1) 如果这三个数都不相等,则显示0;
(2) 如果这三个数中有两个数相等,则显示1;
(3) 如果这三个数都相等,则显示2;

源码

DATAS SEGMENT
	D DB 3 DUP(?); 将数据首先保存到D数组
	D1 DW ?
	D2 DW ?
	D3 DW ?
	D4 DB 30h
	MESSAGE DB 'please input three number(hex,1Byte):',13,10,'$' 
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    LEA DX,MESSAGE
    MOV AH,09H ;dos 9号功能调用输出字符串,以$结尾
    INT 21H   ; 输出提示
    MOV CX, 3H        ;控制输入3个数
    MOV SI,OFFSET D	;利用寄存器间接寻址
    ;输入一个数据要求为2位的16进制的数,表示一个字节
INPUT: MOV BX ,0; 将输入的数据暂时保留BX,初始化位0
	MOV AH,01H  ; dos 1号功能调用输入1个字符到AL
	INT 21H  	; 读入字节高位
	CMP Al, 'a' ; 输入的是a..f
	JB C1
	SUB AL,20H; 变成小写字母
C1: CMP AL, 'A; ;  
    JB C2
    SUB AL,7H; 与数字‘9’隔7
C2: SUB AL,30H
	MOV BL,AL
	SHL BL,1
	SHL BL,1
	SHL BL,1
	SHL BL,1; 循环左移4位,移到高位
	INT 21H
	CMP Al, 'a' ; 输入的是a..f
	JB C3
	SUB AL,20H; 变成小写字母
C3: CMP AL, 'A; ;  
    JB C4
    SUB AL,7H; 与数字‘9’隔7
C4: SUB AL,30H
	ADD BL,AL
	MOV [SI], BL;将数据送往内存D的位置
	INC SI ; si+1
	MOV AH,02H ; dos 2号功能输出1个字符
	MOV DL,13 ;输出字符
	INT 21H  ; 输出\r使得表示将光标移至行首,dos系统下需要这样做
	MOV DL,10
	INT 21H ; 输入\n 换行
	LOOP INPUT ;循环
	MOV SI,OFFSET D
	MOV AX,0H; 因为AX16,D8位,用Al,所以ax初始化为0
    MOV AL,BYTE PTR [SI]
    MOV D1,AX
    MOV AL,BYTE PTR [SI+1]
    MOV D2,AX
    MOV A,BYTE PTR [SI+2]
    MOV D3,AX ; 将数据分别送往D1,D2,D3
    MOV AX,D1
    CMP AX,D2
    JE L1 ; D1,D2相等跳转L1位置
    CMP AX,D3
    JE L2
    MOV AX,D2
    CMP AX,D3
    JE L2
    JMP L
L1: MOV D4,31H
	CMP AX,D3
	JNE L
	MOV D4,32H
	JMP L
L2: MOV D4,31H
	JMP L
L:	MOV AH,02H ; dos 2号功能输出1个字符
	MOV DL,D4
	INT 21H
	MOV AH,4CH  ; 随机输入一个字符,用来暂停程序,观看结果
	INT 21H
CODES ENDS
    END START
相关标签: asm