计算两个数之间所有整数的和_汇编语言:输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...
實(shí)驗(yàn)要求:
(1)在屏幕提示:“please input the first number(0–99): ”后,輸入一個(gè)0–99之間的整數(shù)。
若所輸入的數(shù)不在此范圍內(nèi),或輸入其它字符,則屏幕提示:“input an invalid number, input again!”;
(2)在屏幕提示:“please input the second number(0–99): ”后,輸入一個(gè)0–99之間的整數(shù)。
若所輸入的數(shù)不在此范圍內(nèi),或輸入其它字符,則屏幕提示:“input an invalid number, input again!”。
(3)對(duì)2個(gè)整數(shù)做乘法運(yùn)算。
(4)在屏幕上顯示出乘積所對(duì)應(yīng)的二進(jìn)制和十六進(jìn)制數(shù);
顯示部分功能要求用子程序?qū)崿F(xiàn)。
完整代碼如下:
DATAS SEGMENT
;此處輸入數(shù)據(jù)段代碼
string1 db "please input the first number(0-99):",0dh,0ah,"$"
string2 db "please input the second number(0-99):",0dh,0ah,"$"
string3 db "input an invalid number, input again!",0dh,0ah,"$"
linefeed db 0dh,0ah,'$'
buff1 db 5
num1 db ?
chars1 db 5 dup(0)
buff2 db 5
num2 db ?
chars2 db 5 dup(0)
temp db 10
finum db 0
senum db 0
DATAS ENDS
STACKS SEGMENT
;此處輸入堆棧段代碼
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此處輸入代碼段代碼
mov ah,09h
mov dx,offset string1
int 21h
input1:
mov dx,offset buff1
mov ah,0ah
int 21h
mov dx,offset linefeed
mov ah,09h
int 21h
check1:
lea bx,chars1
mov cl,num1
mov ch,0
nextt1:
mov dx,[bx]
cmp dl,'0'
jb again1;小于就
cmp dl,'9'
ja again1;大于就
inc bx
loop nextt1
jmp inputcontinue
again1:
mov dx,offset string3
mov ah,09h
int 21h
jmp input1
inputcontinue:
mov ah,09h
mov dx,offset string2
int 21h
input2:
mov dx,offset buff2
mov ah,0ah
int 21h
mov dx,offset linefeed
mov ah,09h
int 21h
check2:
lea bx,chars2
mov cl,num2
mov ch,0h
nextt2:
mov dx,[bx]
cmp dl,'0'
jb again2;小于就
cmp dl,'9'
ja again2;大于就
inc bx
loop nextt2
jmp putcontinue
again2:
mov dx,offset string3
mov ah,09h
int 21h
jmp input2
putcontinue:
firstnum:
lea bx,chars1
mov al,[bx]
;and al,0fh;ascii碼變成數(shù)值
sub al,30h
push ax
mov cl,num1 ;是否是單位數(shù)操作
cmp cl,1
jne doubchange1 ; num1!=1 ?-
jmp secondnum
doubchange1: ;將字符串變?yōu)槭M(jìn)制數(shù)字保存在al內(nèi)!
mul temp
mov ah,al
mov al,[bx+1]
;and al,0fh
sub al,30h
add al,ah
push ax;保存!
secondnum:
lea bx,chars2
mov al,[bx]
;and al,0fh
sub al,30h
mov cl,num2
cmp cl,1
jne doubchange2
jmp multi
doubchange2:
mul temp
mov ah,al ;暫時(shí)存放在ax高八位
mov al,[bx+1]
; and al,0fh
sub al,30h
add al,ah
multi:;做乘法運(yùn)算
mov bl,al
pop ax
mul bl
output1: ;輸出結(jié)果十六進(jìn)制
push ax
mov al,ah
call DisplayforAl_H
pop ax
call DisplayforAl_H
push ax ;暫時(shí)保存結(jié)果
mov dx,'H'
mov ah,02h
int 21h
mov dx,offset linefeed; 換行!
mov ah,9
int 21h
output2: ;輸出結(jié)果二進(jìn)制
pop ax
mov bx,ax
call DisplayforBx_B
mov dx,'B'
mov ah,02h
int 21h
MOV AH,4CH
INT 21H
DisplayforAl_H proc near ;輸出al十六進(jìn)制數(shù)據(jù)也就是兩個(gè)字符
push ax ;過程中使用了AX、CX和DX,所以先保存
push cx
push dx
push ax ;暫存ax
mov dl,al ;轉(zhuǎn)換al的高4位
mov cl,4
shr dl,cl ;把高四位移到后4位
;or dl,30h ;al高4位變成0011,相當(dāng)于在dl上加30h
add dl,30h
cmp dl,39h
jbe DisplayforAl1;小于等于
add dl,7 ;是0Ah~0Fh,還要加上7 A:65,9:57,10:58+7=65:A
DisplayforAl1:
mov ah,2 ;顯示
int 21h
pop dx ;將原ax的值恢復(fù)到dx
and dl,0fh ;去掉高4位保留低4位
;or dl,30h
add dl,30h
cmp dl,39h
jbe DisplayforAl2
add dl,7
DisplayforAl2:
mov ah,2 ;顯示
int 21h
pop dx
pop cx
pop ax
ret ;過程返回
DisplayforAl_H endp
DisplayforBx_B proc near ;顯示二進(jìn)制
mov cx,16 ;顯示總共位數(shù)
L:
rol bx,1;左移,從頭至尾依次移至CF中
mov dl,0
adc dl,30h;dl=dl+30h+CF
mov ah,02h
int 21h
loop L
ret
DisplayforBx_B endp
MOV AH,4CH
INT 21H
CODES ENDS
END START
運(yùn)行結(jié)果如下圖:
總結(jié)
以上是生活随笔為你收集整理的计算两个数之间所有整数的和_汇编语言:输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python程序设计下载_Python程
- 下一篇: python中文开发环境_Eclipse