怎么输入一个十六进制数
如何输入一个十六进制数?
目前只知道用0AH号功能将其当做字符串输入,但是要对其进行运算就很麻烦,如何直接输入一个十六进制数(不超过四位)?
------解决方案--------------------
无论你输入的是什么,cpu都把他转换成二进制存在内存中。我这里有一个早以前我的一个练习。你烟酒一下
目前只知道用0AH号功能将其当做字符串输入,但是要对其进行运算就很麻烦,如何直接输入一个十六进制数(不超过四位)?
------解决方案--------------------
无论你输入的是什么,cpu都把他转换成二进制存在内存中。我这里有一个早以前我的一个练习。你烟酒一下
- Assembly code
assume cs:code,ds:data,ss:stack data segment msg1 db 'Choice digit type:[1]Hex [2]Dec [3]Oct [4]Bin:$' msg2 db 'Input switch type:[1]Hex [2]Dec [3]Oct [4]Bin:$' msg3 db 'Input :$' msg4 db 'Result:$' var1 db 0 var2 db 0 buff db 16 dup (0) error db 'Invalid number or Out of compass !$' tab1 dw 10000,1000,100,10,1 tab2 dw 4096,512,64,8,1 tab3 dw 8000h,4000h,2000h,1000h,800h,400h,200h,100h,80h, 40h,20h,10h,8h,4h,2h,1h sum dw 0 data ends stack segment stack dw 128 dup (0) stack ends code segment start: mov ax,data mov ds,ax ;------------------------------------------------; mov dx,offset msg1 mov ah,9 int 21h mov ah,1 int 21h cmp al,0dh jz _err cmp al,'1' jb _err cmp al,'4' ja _err mov var1,al call crlf ;------------------------------------------------; mov dx,offset msg2 mov ah,9 int 21h mov ah,1 int 21h cmp al,0dh jz _err cmp al,'1' jb _err cmp al,'4' ja _err mov var2,al call crlf ;------------------------------------------------; mov dx,offset msg3 mov ah,9 int 21h ; cmp var1,31h jz inhex cmp var1,32h jz indec cmp var1,33h jz inoct cmp var1,34h jz inbin jmp _err ;------------------------------------------------; ; ;check hex-input ; inhex: mov cx,4 mov di,offset buff _inhex: mov ah,1 int 21h cmp al,0dh jz none cmp al,'0' jb _err cmp al,'9' ja d ; sub al,30h jmp jx1 d: cmp al,'A' jb _err cmp al,'F' ja x ; sub al,37h jmp jx1 x: cmp al,'a' jb _err cmp al,'f' ja _err ; sub al,57h jx1: mov [di],al inc di dec cx jcxz ol1 jmp _inhex ol1: jmp a2h ;------------------------------------------------; ; ;check dec-input ; indec: mov si,0 mov cx,5 mov di,offset buff _indec: mov ah,1 int 21h cmp al,0dh jz ol2 cmp al,'0' jb _err cmp al,'9' ja _err sub al,30h mov [di],al inc di inc si dec cx jcxz ol2 jmp _indec ol2: jmp d2h ;------------------------------------------------; ;check oct-input ; inoct: mov si,0 mov cx,5 mov di,offset buff _inoct: mov ah,1 int 21h cmp al,0dh jz ol3 cmp al,'0' jb _err cmp al,'8' ja _err sub al,30h mov [di],al inc di inc si dec cx jcxz ol3 jmp _inoct ol3: jmp o2h ;------------------------------------------------; ;check bin-input ; inbin: mov si,0 mov cx,16 mov di,offset buff _inbin: mov ah,1 int 21h cmp al,0dh jz ol4 cmp al,'0' jb _err cmp al,'1' ja _err sub al,30h mov [di],al inc di inc si dec cx jcxz ol4 jmp _inbin ol4: jmp b2h ;------------------------------------------------; a2h: mov cx,12 mov si,offset buff xor dx,dx load: mov al,[si] cmp al,0 jz ok1 inc si cmp al,40h jb sz cmp al,47h jb zd cmp al,67h jb zx sz: sub al,30h mov ah,0 shl ax,cl add dx,ax sub cx,4 jmp a2hjx zd: sub al,37h mov ah,0 shl ax,cl add dx,ax sub cx,4 jmp a2hjx zx: sub al,57h mov ah,0 shl ax,cl add dx,ax sub cx,4 a2hjx: cmp cx,0fffch jz ok1 jmp load ok1: push dx jmp show ;------------------------------------------------; d2h: mov bx,offset buff add bx,si dec bx mov di,offset tab1 add di,8 mov cx,si shijia: mov al,[bx] xor ah,ah mul word ptr [di] add sum,ax jc _err sub di,2 dec bx loop shijia push word ptr sum jmp show ;------------------------------------------------; o2h: mov bx,offset buff add bx,si dec bx mov di,offset tab2 add di,8 mov cx,si bajia: mov al,[bx] xor ah,ah mul word ptr [di] add sum,ax jc _err sub di,2 dec bx loop bajia push word ptr sum jmp show ;------------------------------------------------; b2h: mov bx,offset buff add bx,si dec bx mov di,offset tab3 add di,30 mov cx,si erjia: mov al,[bx] xor ah,ah mul word ptr [di] add sum,ax jc _err sub di,2 dec bx loop erjia push word ptr sum jmp show ;------------------------------------------------; show: call crlf mov dx,offset msg4 mov ah,9 int 21h cmp var2,31h jz _hex cmp var2,32h jz _dec cmp var2,33h jz _oct cmp var2,34h jz _bin _hex: pop dx call disphex jmp over _dec: pop dx call dispdec jmp over _oct: pop dx call dispoct jmp over _bin: pop dx call dispbin jmp over ;------------------------------------------------; none: cmp si,0 jz over _err: call crlf mov dx,offset error mov ah,9 int 21h over: mov ah,4ch int 21h ; crlf proc mov ah,2 mov dl,0dh int 21h mov dl,0ah int 21h ret crlf endp ; err proc mov dx,offset error mov ah,9 int 21h ret err endp ; disp proc mov dx,offset msg4 mov ah,9 int 21h ret disp endp ; ;input:dx disphex proc uses dx mov cx,4 d1: push cx mov cl,4 rol dx,cl push dx and dx,0fh cmp dl,10 jb d10 add dl,37h mov ah,2 int 21h jmp jx2 d10: add dl,30h mov ah,2 int 21h jx2: pop dx pop cx loop d1 mov dl,'H' mov ah,2 int 21h call crlf ret disphex endp ; ;input:dx dispdec proc uses dx mov ax,dx xor dx,dx mov bx,10 mov cx,0 d2: cmp ax,10 jb ok2 div bx add dl,30h push dx xor dx,dx inc cx jmp d2 ok2: add al,30h push ax inc cx<F12> d3: pop dx mov ah,2 int 21h loop d3 mov dl,'D' mov ah,2 int 21h call crlf ret dispdec endp ; ;input:dx dispoct proc uses dx mov bx,8 mov cx,0 mov ax,dx xor dx,dx d3: cmp ax,8 jb ok3 div bx add dl,30h push dx xor dx,dx inc cx jmp d3 ok3: add al,30h push ax inc cx d4: pop dx mov ah,2 int 21h loop d4 mov dl,'Q' mov ah,2 int 21h call crlf ret dispoct endp ; ;input:dx dispbin proc mov cx,16 mov ax,dx xor dx,dx d5: rol ax,1 adc dl,0 push ax add dl,30h mov ah,2 int 21h xor dx,dx pop ax loop d5 mov dl,'B' mov ah,2 int 21h ret dispbin endp ; code ends end start