用8086汇编语言编写数的比较
发布网友
发布时间:2022-04-29 07:57
我来回答
共1个回答
热心网友
时间:2022-06-24 13:49
首先声明,我不是为了分才回答你的,而是我真心帮忙的。而且百度成立这个知道呢,目的不是给人加分的,而是提供一个交流的平台互助的平台。
我不知道你是拿去做什么,但是你要的话就给你改嘛。自己调试嘛!我没有时间改。
下面是修改后的程序:
DATA SEGMENT
WORD1 DB 'input the data1:',0AH,0DH,'$'
WORD2 DB 'input the data2:',0AH,0DH,'$'
SPACE DB 0AH,0DH,'$'
OUTPUT DB 'the max data is:',0AH,0DH,'$'
BUFFER DB 20H
DB 0
DB 20H DUP(0) ;存输入字符,大小可改
DATA ENDS
STACK1 SEGMENT STACK
DB 20H DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA ;初始化段
MOV DS,AX
MOV DX,OFFSET WORD1 ;显示字符串
MOV AH,09H ;中断显示
INT 21H
MOV AH,0AH ;数据输入
INT 21H
MOV CL,BUFFER+1 ;buffer的第二个空间存储的是输入数据的个数,做为循环值
DEC CL ;最后一个是0d,不是输入要比较的数据
MOV SI,02
MOV AL,BUFFER[SI] ;存第一个数据
SUB AL,30H ;将数据转换为十进制
MOV BUFFER[SI],AL ;存储 在后十个空间 ,以后的语句一样
LP: INC SI
SUB SI,08H
MOV AL,BUFFER[SI]
SUB AL,30H
ADD SI,08H
MOV BUFFER[SI],AL
LOOP LP ;循环处理
MOV DX,OFFSET SPACE ;显示字符串 ,换行
MOV AH,09H ;中断显示
INT 21H
MOV DX,OFFSET WORD2
MOV AH,09H
INT 21H
MOV AH,0AH ;数据输入
INT 21H
MOV CL,BUFFER+1
MOV SI,02
MOV AL,BUFFER[SI] ;存第二个数据
LP1: SUB AL,30H ;将数据转换为十进制
MOV BUFFER[SI],AL ;存储
INC SI
MOV AL,BUFFER[SI]
SUB AL,30H
MOV BUFFER[SI],AL
LOOP LP1 ;循环处理
MOV DX,OFFSET SPACE ;显示字符串 ,换行
MOV AH,09H ;中断显示
INT 21H
MOV SI,02H
MOV CL,BUFFER+1
LP2: MOV DL,BUFFER[SI] ;取出第一个数据
MOV AL,BUFFER[SI]+08H ;取出第二个数据
CMP AL,DL ;比较大小
JGE LP3
MOV BUFFER[SI],DL ;存较大的数据
INC SI
LOOP LP2
JMP END1
LP3: MOV BUFFER[SI],AL ;存较大的数据
LOOP LP2
END1: MOV DX,OFFSET OUTPUT ;显示字符串
MOV AH,09H ;中断显示
INT 21H
MOV BL,BUFFER+1
INC BL
MOV BH,0
MOV AL,'$'
MOV BUFFER[BX],AL
MOV AX,OFFSET BUFFER
ADD AX,02H
MOV DX,AX ;送最大的数据显示
MOV AH,09H ;中断显示
INT 21H
MOV AH,4CH ;返回dos
INT 21H
CODE ENDS
END START
输入数据为几位位十进制数,编译全通过,运行结果乱码。以前的还是给你:
DATA SEGMENT
WORD1 DB 'input the data1:',0AH,0DH,'$'
WORD2 DB 'input the data2:',0AH,0DH,'$'
SPACE DB 0AH,0DH,'$'
OUTPUT DB 'the max data is:',0AH,0DH,'$'
BUFFER DB 20H DUP(?) ;存输入字符,大小可改
DATA ENDS
STACK1 SEGMENT STACK
DB 20H DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA ;初始化段
MOV DS,AX
MOV DX,OFFSET WORD1 ;显示字符串
MOV AH,09H ;中断显示
INT 21H
MOV AH,01H ;数据输入
INT 21H
MOV BUFFER,AL ;存第一个数据
MOV DX,OFFSET SPACE ;显示字符串 ,换行
MOV AH,09H ;中断显示
INT 21H
MOV DX,OFFSET WORD2
MOV AH,09H
INT 21H
MOV AH,01H ;数据输入
INT 21H
MOV BUFFER+1,AL ;存第二个数据
MOV DX,OFFSET SPACE ;显示字符串 ,换行
MOV AH,09H ;中断显示
INT 21H
MOV DL,BUFFER ;取出第一个数据
MOV AL,BUFFER+1 ;取出第二个数据
CMP AL,DL ;比较大小
JGE LP
MOV BUFFER,DL ;存较大的数据
MOV DX,OFFSET OUTPUT ;显示字符串
MOV AH,09H ;中断显示
INT 21H
MOV DL,BUFFER ;送最大的数据显示
MOV AH,02H ;中断显示
INT 21H
JMP END1
LP: MOV BUFFER,AL ;存较大的数据
MOV DX,OFFSET OUTPUT ;显示字符串
MOV AH,09H ;中断显示
INT 21H
MOV DL,BUFFER ;送最大的数据显示
MOV AH,02H ;中断显示
INT 21H
END1: MOV AH,4CH ;返回dos
INT 21H
CODE ENDS
END START
你可以对照调试修改,我没有时间修改,实在sorry了。