汇编作业 16和10进制的相互转换
1: data segment2: firstline db "cin 1(hex to dec) or 2(dec to hec) (cin # means exit):$"
3: ends 4: 5: display equ 2h 6: key_in equ 1h 7: doscall equ 21h 8: hexidec segment 9: ;--------------------------------- 10: main proc far 11: start: 12: mov ax, data 13: mov ds, ax 14: mov es, ax 15: lea dx, firstline 16: mov ah, 9 17: int doscall 18: 19: ;------------------- 20: mov ah, key_in 21: int doscall 22: push ax23: call crlf
24: pop ax 25: cmp al,31h 26: je hextodec 27: cmp al,32h 28: je dectohex 29: 30: dectohex: ;10进制换成16进制 31: call decibin
32: call crlf
33: call binihex
34: call crlf
35: jmp start 36: hextodec: ;十六进制换成10进制37: call hexibin
38: call crlf
39: call binidec
40: call crlf
41: jmp start 42: main endp 43: ;---------------------------------------- 44: hexibin proc near ;16-->2 45: mov bx,0 46: newchar: 47: mov ah,key_in ;输入1位字符 48: int doscall 49: cmp al,'#'
50: je exit
51: sub al,30h ;小于0,退出
52: jl exit
53: cmp al,10d ;不大于10 54: jl add_to 55: 56: sub al,7h ;al-=7
57: cmp al,0ah58: jl exit ;比'A'小,退出
59: cmp al,10h ;比较al和'G'
60: jge exit ;大于等于'G',退出
61: add_to: 62: mov cl,4 63: shl bx,cl ;bx左移4位,bx+=ax 64: mov ah,0 65: add bx,ax 66: jmp newchar 67: exit:
68: ret 69: hexibin endp 70: ;------------------------------------ 71: binidec proc near 72: mov cx,10000d ;bx/1000073: call dec_div
74: mov cx,1000d ;bx/100075: call dec_div
76: mov cx,100d77: call dec_div
78: mov cx,10d79: call dec_div
80: mov cx,1d81: call dec_div
82: ret 83: binidec endp 84: ;-------------------------------------- 85: dec_div proc near 86: mov ax,bx 87: mov dx,0 88: div cx ;dx,ax/cx 89: mov bx,dx ;商 90: mov dl,al ;余数 91: 92: add dl,30h 93: mov ah,display 94: int doscall 95: ret 96: dec_div endp 97: ;----------------------------- 98: crlf proc near ;输出回车 99: mov dl,0ah 100: mov ah,display 101: int doscall 102: 103: mov dl,0dh 104: mov ah,display 105: int doscall 106: ret 107: crlf endp 108: ;--------------------------- 109: hexidec ends 110: ;=============================== 111: decibin proc near ;10-->2 112: mov bx,0 113: newchar1: 114: mov ah,key_in 115: int doscall 116: cmp al,'#'
117: je exit1118: sub al,30h ;al-'0'
119: jl exit1 ;小于0 120: cmp al,9d 121: jg exit1 ;大于9 122: cbw ;8位-->16位 123: xchg ax,bx ;bx<--ax 124: mov cx,10d 125: mul cx ;ax*=10 126: xchg ax,bx 127: 128: add bx,ax 129: jmp newchar1 130: exit1: 131: ret 132: decibin endp 133: ;--------------------------------- 134: binihex proc near 135: mov ch,4 ;bx为16位,要做四次 136: rotate: mov cl,4 137: rol bx,cl ;循环右移4位,即bx/16 138: mov al,bl ;bl-->al139: and al,0fh ;al & 00001111
140: add al,30h141: cmp al,3ah ;比较al和"10"
142: jl print143: add al,7h ;'10'-->'A'
144: print: 145: mov dl,al 146: mov ah,display 147: int doscall 148: dec ch 149: jnz rotate 150: ret 151: binihex endp 152: ;--------------------------------153: end start
学汇编,伤不起,没本事,更伤不起。

浙公网安备 33010602011771号