C语言转换位汇编语言 比较两个数大小
发布网友
发布时间:2022-05-29 16:38
我来回答
共3个回答
热心网友
时间:2023-10-25 13:20
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
别人的
热心网友
时间:2023-10-25 13:20
; 3 : int a, b, max;
; 4 : if(a>b) max=a;
moveax, DWORD PTR _a$[ebp]
cmpeax, DWORD PTR _b$[ebp]
jleSHORT $L468
movecx, DWORD PTR _a$[ebp]
movDWORD PTR _max$[ebp], ecx
; 5 : else max=b;
jmpSHORT $L469
$L468:
movedx, DWORD PTR _b$[ebp]
movDWORD PTR _max$[ebp], edx
$L469:
热心网友
时间:2023-10-25 13:21
假设20H放a,21H放b,22H放max
MOV A,21H
CLR C
CJNE A,20H,REL
REL:
JC BXIAOYUA
MOV 22H,21H
RET
BXIAOYUA:
MOV 22H,20H
RET