汇编语言实现从键盘上接收两个一位十六进制数据,求其和,并以十进制形式显示出来

如题所述

DATA SEGMENT
STRING1 DB 0dh,0ah,'Please input the first numbers:',0AH,0DH,'$'
STRING2 DB 0dh,0ah,'Please input the second numbers:',0AH,0DH,'$'
STRING3 DB 0dh,0ah,'The total is:',0AH,0DH,'$'
STRING4 DB 0dh,0ah,'OVERFLOW!',0AH,0DH,'$'
NUM1 DB 4 DUP(0)

numm1 dw 0
numm2 dw 0
NUM2 DB 4 DUP(0)

DATA1 DW 2 DUP(?)
CR DB 0DH,0AH,'$'
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX

LEA DX,STRING1 ;9号功能,显示字符串1输入第一个数
MOV AH,09H
INT 21H
LEA SI,NUM1
Mov cx,4
INPUT1:
MOV AH,01H
INT 21H

sub al,30h
MOV [SI],AL
INC SI
loop INPUT1

LEA DX,STRING2 ;9号功能,显示字符串2输入第二个数
MOV AH,09H
INT 21H
LEA SI,NUM2
mov cx,4
INPUT2:
MOV AH,01H
INT 21H

sub al,30h
MOV [SI],AL
INC SI
loop INPUT2

LEA SI,NUM1
MOV BH,0
MOV BL,[SI]
MOV AX,4096
MOV DX,0
MUL BX
ADD NUMM1,AX
INC SI
MOV BH,0
MOV BL,[SI]
MOV AX,256
MOV DX,0
MUL BX
ADD NUMM1,AX
INC SI
MOV BH,0
MOV BL,[SI]
MOV AX,16
MOV DX,0
MUL BX
ADD NUMM1,AX
INC SI
MOV AL,[SI]
MOV AH,0
ADD NUMM1,AX

LEA SI,NUM2
MOV BH,0
MOV BL,[SI]
MOV AX,4096
MOV DX,0
MUL BX
ADD NUMM2,AX
INC SI
MOV BH,0
MOV BL,[SI]
MOV AX,256
MOV DX,0
MUL BX
ADD NUMM2,AX
INC SI
MOV BH,0
MOV BL,[SI]
MOV AX,16
MOV DX,0
MUL BX
ADD NUMM2,AX
INC SI
MOV AL,[SI]
MOV AH,0
ADD NUMM2,AX

MOV AX,NUMM1
ADD AX,NUMM2
JC L1

PUSH AX
LEA DX,STRING3 ;9号功能,显示和
MOV AH,09H
INT 21H

POP AX ;判溢出,CF=1有溢出,跳到L1处
MOV DX,0 ;无符号按字除 (DX,AX)/源操作数
MOV CX,10000 ;AX:商 ,DX:余数
DIV CX
PUSH DX ;余数DX入栈
MOV AH,0
MOV DL,AL
ADD DL,30H ;0--65535,除10000后AX高八位为0,将商放在DL里
MOV AH,02H ;2号功能输出商即十进制最高位
INT 21H

POP DX
mov ax,dx
mov dx,0
MOV CX,1000 ;余数DX出栈作为除数
DIV CX
PUSH DX
MOV AH,0
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H

POP DX
mov ax,dx
mov dx,0
MOV CX,100
DIV CX
PUSH DX
MOV AH,0
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H

POP DX
mov ax,dx
mov dx,0
MOV CX,10
DIV CX
PUSH DX
MOV AH,0
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H

POP DX
add dl,30h
MOV AH,02H
INT 21H
jmp exit
L1: LEA DX,STRING4
MOV AH,09H
INT 21H
EXIT: MOV AH,4CH ;返回DOS
INT 21H

CODE ENDS
END START
温馨提示:内容为网友见解,仅供参考
无其他回答

汇编语言 实现从键盘上接收两个一位十六进制数据,求其和,并以十进制...
jnz a4 ;输入十六进制数字,大小写随意 mov al,buf+2 add al,buf+3 ;加法 mov bl,100 cbw div bl add al,30h mov buf+2,al ;十进制百位 mov al,ah mov bl,10 cbw div bl add al,30h mov buf+3,al add ah,30h mov buf+4,ah ;十进制十位、个位 lea dx,buf mov ah,9 int ...

用汇编语言编写程序从键盘输入两个一位十六进制数相加显示结果,要求...
mov dl, 10 mov cl, 10 Loop1:xor ah, ah div dl cmp al, 0 jne Next2 cmp flag, 0 je Next3 Next2:mov flag, 1 mov [si], al add byte ptr[si], '0'inc si Next3:

用汇编语言! 编一程序把键入的十六进制数转化 成十进制数。
编一程序把键入的十六进制数,转化成十进制数,并在屏幕上显示。键入的十六进制数,不限位数。如超出四位,只将最后四位做转换并显示。若键入非十六进制数,则不予显示,等待继续输入。键入回车符,结束输入。程序如下:

汇编语言,如何将输入的十六进制数转换成十进制数输出
输入一个多位十六进制数,显示等值的十进制。输入字符,需要减去 37H 或 30H,变换为十六进制数字。再组成一个多位数。显示之前,则需要相反的变化。本程序具有对输入数据进行合法性判断的功能。输入非十六进制数的符号时,本程序将不做反应。

基于汇编语言,下面程序修改为十六进制相加结果十进制输出,尽量少...
;以16进制形式显示 XOR AH, AH CALL PRINT JMP EXIT;_IN_ERR:MOV DX, OFFSET MSG2;can not count so much !MOV AH, 9 INT 21H EXIT:MOV AH, 4CH INT 21H PRINT PROC NEAR PUSH BX PUSH DX MOV BX, 10 XOR DX, DX OR AX, AX JZ ...

运用汇编语言怎样以2进制、8进制、10进制、16进制方式输出10进制的数...
本文阐述了如何运用汇编语言实现以2进制、8进制、10进制、16进制方式输出10进制数值的计算结果。首先,通过`assume`语句定义代码段`code`和数据段`data`,以及堆栈段`stack`。数据段用于存放待转换的十进制数,堆栈段用于临时存储中间结果。接下来定义了转换函数`dtoc`,用于将十进制数转换为各种进制表示。

汇编语言中如何将十六进制数结果转换成十进制字符输出?
MOV AH,02H MOV DL,31H INT 21H 则可显示出1.如把DL后的值改成35H则可显示出5了.而用显存方式则要送到B800H:0开始的单元,还要注意它是按照字符和显示属性的顺序来写的,也就是显示一个字符要用两个字节,前面这个字节控制要显示的字符,后面这个字节控制显示属性(颜色,闪烁,高亮度等).

汇编语言如何将数值以十进制的形式输出到屏幕上
设置一字符串sBuf长度为14满足最大长度就OK 看你的数值长度,如果2字节的,即0~65535的值,可以用以下代码。要转换的放到AX里,字符串尾放SI里 MOV AX,VAL XOR DX,DX MOV BX,10 AGAIN: DIV BX ADD AL,30H MOV [SI],AL DEC SI XOR AX,AX CMP DX,0 JNZ AGAIN:之后把SI所指向的字符串...

汇编语言程序设计题
请各位达人帮忙,题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,对其求和并显示结果,程序运行时提示输入加数和被加数,求完和显示结果后,显示继续和退出。非常谢谢!... 请各位达人帮忙,题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,对其求和并显示结果,程序运行时提示输入加数和被加数,求完和...

汇编语言怎样实现从键盘输入一个十六进制数打印出其对应的十进制?
main proc near Begin:call Input mov dl, 0ah mov ah, 02h int 21h mov dl, 0dh int 21h call ToDec mov dl, 0ah int 21h mov dl, 0dh int 21h jmp Begin Exit:mov ah, 4ch int 21h ret main endp Input proc near mov dh, 00h;mov bx, 0000h Loop1:cmp dh, 03h jg Ret...

相似回答