题目应该是“如何用汇编语言把10进制数转换成十六进制代码”吧!
刚刚写了个,供参考:
;输入不超过65535的10进制数,将其以16进制的形式显示
code segment
assume cs:code
org 100h
start:
jmp bbb
x dw 0
msg1 db 10,13,'please input a number:','$'
msg2 db 10,13,' ','$'
bbb:
push cs
pop ds
lea dx,msg1
mov ah,9
int 21h
lea bx,x
mov ax,0
push ax
again1:
mov ah,1
int 21h
cmp al,13
je line0
sub al,30h
mov ah,0
mov si,ax
pop ax
mov cl,10
mov ch,0
mul cx
add ax,si
push ax
jmp again1
line0:
pop ax
mov word ptr[x],ax
lea di,msg2
inc di
inc di
mov cx,4
again2:
mov ax,word ptr[x]
rol ax,1
rol ax,1
rol ax,1
rol ax,1
; rol ax,4
mov word ptr[x],ax
and ax,000Fh
cmp al,9
jg line1
add al,30h
mov byte ptr[di],al
jmp line2
line1:
add al,37h
mov byte ptr[di],al
line2:
inc di
loop again2
lea dx,msg2
mov ah,9
int 21h
mov ah,8
int 21h
mov ah,4ch
int 21h
code ends
end start
不熟汇编,,,随便提点想法,,错了勿怪
先是确定你针对哪种汇编,例如是8086的,那么通过手册可以查阅到所有语句的对应二进制码(不同的汇编语言不同),这个是你要写在yacc的语义动作里的
然后是2-16的转换,这个你在整个输入程序的最后的动作中,把前述的二进制码转成16进制就可以了吧?比如在yacc里, S: a b c {here convert all binary code reference(maybe a stack) to hex.}
抛砖引玉……
----------
都说了不熟汇编了。。。感觉上不是很难吧,你又是用vc写编译器,应该有现成的库可以用~bls
不是把汇编语言转换成十六进制代码,而是把用汇编语言写的程序编译成十六进制的代码,需要编译软件呀。
使用编译器,编译软件就可以把汇编语言的源代码编译,然后生成HEX文件也就是16进制代码
例如:KEIL UV2,UV3,UV4等,或伟福,或IAR等软件都是编译软件
用编译软件,
曾经的单板机编程,是需要人工查表转化