答案:刚好我写了一个,调试都通过可以执行的,希望能帮到你。
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db 'convert num to srting',0
szResult db 6 dup(0)
.code
_Translate proc para1:DWORD,para2:DWORD ;定义子函数,para1变量用来放传入的数组,para2用于放编程ASIC后的字符数组
LOCAL _iNum ;定义零时变量,用于放被除数
LOCAL _iTemp ;定义零时变量,用于存放除数
LOCAL _szTemp[265]:BYTE
mov eax,para1; ;获取参数para1的值eax寄存器
mov _iNum,eax ;将eax中的值放入零时变量_iNum
mov _iTemp,10H
lea ebx,_szTemp
xor ecx,ecx
.while _iNum ;当被除数不为0时,就一直循环
xor edx,edx
mov eax,_iNum ;将被除数放入eax寄存器中
div _iTemp ;寄存器eax中的值除以_iTemp,商放入eax中,余数放入dl中
mov _iNum,eax
.if dl>9H ;当余数大于9时,就转化为相对应的英文字母的ASIC的值
add dl,37H
.else
add dl,30H
.endif
mov byte ptr [ebx],dl;把变化后的值放入ebx寄存器中
inc ebx
inc ecx
.endw
mov eax,para2 ;将参数para2的地址传给eax寄存器,再讲ecx中的值倒序存入eax寄存器中
mov byte ptr [eax+ecx],0
lea ebx,_szTemp
.repeat
mov dl,byte ptr [ebx]
mov byte ptr [eax+ecx-1],dl
inc ebx
.untilcxz ;一直循环,直到cx的值=0,每次循环后ecx的值-1
ret
_Translate endp
start:
mov eax,1A5FH ;修改这里的数,就能把任意16进制的数转化为ASIC码了
invoke _Translate,eax,offset szResult
invoke MessageBox,NULL,offset szResult,offset szCaption,MB_OK
invoke ExitProcess,0
end start
其他:1变成31h
A变成41h
5 35h
F 46h
转化后就可以显示了,转化算法很简单,你自己考虑
上一个:求芯片74hc164的输入输出程序,要求使用汇编语言。
下一个:汇编语言的问题