如何用汇编语言把十六进制数1A5F转换成ascii码并显示在屏幕上 汇编语言:两位十六进制转换成ASCII码,并送屏幕显示,要求...

\u6c47\u7f16\u7a0b\u5e8f \u5341\u516d\u8fdb\u5236\u6570\u8f6c\u6362\u6210ASCII\u7801

\u4e3e\u4e2a\u4f8b\u5b50\uff0c6CH\uff0c\u8f6c\u6362\u6210ASCII\u7801\uff0c\u662f\u4ee5\u5341\u516d\u8fdb\u5236\u5f62\u5f0f\u663e\u793a\uff1a6CH\uff0c\u8fd8\u662f\u4ee5\u5341\u8fdb\u5236\u5f62\u5f0f\u663e\u793a\uff1a108\uff1f

; \u672c\u7a0b\u5e8f\u901a\u8fc7\u7f16\u8bd1\uff0c\u8fd0\u884c\u6b63\u786e
Code Segment
Assume CS:Code,DS:Code
; \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d
; \u529f\u80fd\uff1a\u663e\u793a\u6307\u5b9a\u5730\u5740\uff08Str_Addr\uff09\u7684\u5b57\u7b26\u4e32
; \u5165\u53e3\uff1a
; Str_Addr\uff1d\u5b57\u7b26\u4e32\u5730\u5740\uff08\u8981\u6c42\u5728\u6570\u636e\u6bb5\uff09
; \u7528\u6cd5: Output Str_Addr
; \u7528\u6cd5\u4e3e\u4f8b\uff1aOutput PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d
; \u529f\u80fd\uff1a\u628aAL\u4e2d\u7684\u4e8c\u8fdb\u5236\u65e0\u7b26\u53f7\u6570\u8f6c\u6362\u6210\u663e\u5f0f\u7684\u5341\u8fdb\u5236ASCII
; \u5165\u53e3\uff1aAL=\u4e8c\u8fdb\u5236\u6570\uff1bdi=\u8f6c\u6362\u540e\u7684ASCII\u4fdd\u5b58\u5730\u5740
; \u51fa\u53e3\uff1a\u65e0
HEXASC_Dec Proc Near
push si
push cx
push bx
push di
mov bl,10
xor cx,cx
lea di,@@Temp_Save[3]
cld
@@Divide: xor ah,ah
div bl
or ah,30h
mov [di],ah
dec di
inc cx
test al,0ffh
jnz @@Divide
push di
pop si
inc si
pop di
pop bx
rep movsb
pop cx
pop si
ret
@@Temp_Save db 4 dup(?)
HEXASC_Dec EndP
; \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d
; \u529f\u80fd\uff1a\u5c06AL\u4e2d\u7684\u4f4e4\u4f4d\u4e8c\u8fdb\u5236\u6570\u8f6c\u6362\u6210\u5341\u516d\u8fdb\u5236\u663e\u793a\u7684ASCII\u7801
; \u5165\u53e3\uff1aAL
; \u51fa\u53e3\uff1aAL=\u8f6c\u6362\u540e\u7684ASCII\u7801
AL_ASCII Proc Near
cmp al,10 ;AL<10?
jb @@To_ASCII ;AL<10\uff0c\u6309\u6570\u5b57\u5904\u7406
add al,7 ;AL>=10\uff0c\u6309\u5927\u5199\u5b57\u6bcd\u5904\u7406
@@To_ASCII: add al,'0' ;\u8f6c\u6362\u6210\u76f8\u5e94\u7684\u6570\u5b57\u6216\u5927\u5199\u5b57\u6bcd
ret
AL_ASCII EndP
; \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d
; \u529f\u80fd\uff1a\u5c06AL\u4e2d\u7684\u5b57\u8282\u6570\u8f6c\u6362\u6210\u5341\u516d\u8fdb\u5236\u663e\u793a\u7684ASCII\u7801
; \u5165\u53e3\uff1aAL
; \u51fa\u53e3\uff1aAX=\u8f6c\u6362\u540e\u7684ASCII\u7801
HEXASC_Hex Proc Near
push cx
mov cx,4
xor ah,ah ;\u5c06AH\u7f6e0
shl ax,cl ;\u5c06AX\u5de6\u79fb4\u4f4d
shr al,cl ;\u5c06AL\u53f3\u79fb4\u4f4d
xchg ah,al
call AL_ASCII ;\u8c03\u7528\u5b50\u7a0b\u5e8f\uff0c\u5c06AL\u4e2d\u7684\u503c\u8f6c\u6362\u6210\u76f8\u5e94\u7684ASCII\u7801
xchg ah,al
call AL_ASCII
xchg ah,al
pop cx
ret
HEXASC_Hex EndP
; \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d
Translate db '0' ;\u8f6c\u6362\u65b9\u5f0f\uff08\u9ed8\u8ba4\uff1a\u5341\u8fdb\u5236\u6570\u663e\u793a\uff1b\u82e5\u8981\u5341\u516d\u8fdb\u5236\u663e\u793a\uff0c\u5219\u6539\u4e3a\uff1a1\uff09
BUF db 23,35,46,57,68,79,81,98,119,243
Elements EQU ($-BUF)/Type BUF ;\u5143\u7d20\u4e2a\u6570
Start: push cs
pop ds
push cs
pop es ;\u4f7f\u6570\u636e\u6bb5\u3001\u9644\u52a0\u6bb5\u4e0e\u4ee3\u7801\u6bb5\u540c\u6bb5
cld
lea si,BUF
lea di,Temp_STr
mov cx,Elements
HEX_ASCII: lodsb
.IF Translate == '0'
call HEXASC_Dec
.ELSE
call HEXASC_Hex
stosw
mov al,'H'
stosb
.ENDIF
mov al,','
stosb
loop HEX_ASCII
dec di
mov al,'$'
stosb
Output Temp_STr
Exit_Proc: mov ah,4ch ;\u7ed3\u675f\u7a0b\u5e8f
int 21h
Temp_STr:
Code ENDS
END Start ;\u7f16\u8bd1\u5230\u6b64\u7ed3\u675f
; \uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d
ADD AL,90H
DAA
ADD AL,40H
DAA

\u5341\u8fdb\u5236\u6570\u52a0\u8c03\u6574\u6307\u4ee4DAA(Decimal Adjust After Addition)

\u8be5\u6307\u4ee4\u662f\u7528\u4e8e\u8c03\u6574AL\u7684\u503c\uff0c\u8be5\u503c\u662f\u7531\u6307\u4ee4ADD\u6216ADC\u8fd0\u7b97\u4e8c\u4e2a\u538b\u7f29\u578bBCD\u7801\u6240\u5f97\u5230\u7684\u7ed3\u679c\u3002\u538b\u7f29\u578bBCD\u7801\u662f\u4e00\u4e2a\u5b57\u8282\u5b58\u653e\u4e8c\u4e2aBCD\u7801\uff0c\u4f4e\u56db\u4f4d\u548c\u9ad8\u56db\u4f4d\u90fd\u662f\u4e00\u4e2aBCD\u7801\u3002

\u5176\u8c03\u6574\u89c4\u5219\u5982\u4e0b\uff1a

* \u5982\u679cAL\u7684\u4f4e\u56db\u4f4d\u5927\u4e8e9\uff0c\u6216\u6807\u5fd7\u4f4dAF=1\uff0c\u90a3\u4e48\uff0cAL=AL+6\uff0c\u5e76\u7f6eAF=1\uff1b
* \u5982\u679cAL\u7684\u9ad8\u56db\u4f4d\u5927\u4e8e9\uff0c\u6216CF=1\uff0c\u90a3\u4e48\uff0cAL=AL+60H\uff0c\u5e76\u7f6eCF=1\uff1b
\u3001\u5982\u679c\u4ee5\u4e0a\u4e24\u70b9\u90fd\u4e0d\u6210\u7acb\uff0c\u5219\uff0c\u6e05\u9664\u6807\u5fd7\u4f4dAF\u548cCF\u3002

\u7ecf\u8fc7\u8c03\u6574\u540e\uff0cAL\u7684\u503c\u4ecd\u662f\u538b\u7f29\u578bBCD\u7801\uff0c\u5373\uff1a\u4e8c\u4e2a\u538b\u7f29\u578bBCD\u7801\u76f8\u52a0\uff0c\u5e76\u8fdb\u884c\u8c03\u6574\u540e\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u8fd8\u662f\u538b\u7f29\u578bBCD\u7801\u3002

\u8981\u987a\u5e8f\u7ed3\u6784\uff0c\u5fc5\u987b\u77e5\u9053\u786e\u5b9a\u7684\u4e24\u4f4d\u5341\u516d\u8fdb\u5236\u6570\u3002\u5426\u5219\u53ea\u6709\u901a\u8fc7\u5224\u65ad\u662f\u5426\u5927\u4e8e9\u6765\u8fdb\u884cASCII\u7801\u8f6c\u6362\uff0c\u8fd9\u5c31\u4e0d\u662f\u987a\u5e8f\u7ed3\u6784\u4e86\u3002

刚好我写了一个,调试都通过可以执行的,希望能帮到你。
.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
转化后就可以显示了,转化算法很简单,你自己考虑

;将AL寄存器中的一位十六进制数转化成ASCII码,显示输出。

;程序如下:

ASSUME CS:CODE

CODE SEGMENT

START:

MOV AL, 0FH ;在这里可写 00H~0FH,这就是一位16进制数

AND AL, 0FH ;无用位清零,保留该数字

;下面是变成ASCII码

CMP AL, 0AH

JB NEXT

ADD AL, 07H

NEXT:

ADD AL, 30H

;下面是显示输出

MOV DL, AL ;送到DL

MOV AH, 2 ;显示单个字符

INT 21H ;显示

MOV AH, 4CH ;结束程序

INT 21H ;返回DOS

CODE ENDS

END START



1、将1A5Fh存入内存X中;
2、分四次将x取出放入AX中,对AX循环左移4位,将左移后的结果存回x中,再对AX取与求出其最低4位,这样AL中分别得出1、A、5、F;
3、将AL中存放的1、A、5、F分别转化为ASC2码(对0~9的加上30h,对10及以上的加上37H),再将其分别存入buf单元中;
4、使用09 DOS功能调用输出buf。

程序如下:
code segment
assume cs:code
org 100h
start:
jmp bbb
nop
x dw 1A5Fh
buf db 10,13,0,0,0,0,'$'

bbb:
lea bx,x
lea di,buf
inc di
inc di
mov cx,4
line1:
mov ax,word ptr[bx]
rol ax,4
mov word ptr[bx],ax
and ax,000Fh
cmp al,9
jg line2
add al,30h
jmp line3
line2:
add al,37h
line3:
mov byte ptr[di],al
inc di
loop line1

lea dx,buf
mov ah,9
int 21h
mov ah,8
int 21h
mov ah,4ch
int 21h
code ends
end start

  • 姹囩紪璇█:鏁颁竴涓16杩涘埗鐨勬暟鐨勪綅鏄1鐨勪釜鏁.鑰屼笖瑕佹眰杈撳叆鐨勬暟鎹粠0000H...
    绛旓細渚嬪锛屽涓嬶細锛堝睆骞曚笂鏄剧ず濡備笅[12AB闅忎究杈撳叆涓涓鍗佸叚杩涘埗鏁7鐨勭瓟妗圿锛夎杈撳叆涓涓暟瀛楋紙鍗佸叚杩涘埗锛変粠0000H鍒癋FFFH锛12ABThere 7浣嶏紙S锛夌殑鏁伴噺12AB銆; --- --- OUT_STR MACRO XXX;LEA DX瀹忓畾涔夛紝XXX MOV AH锛9 INT 21H ENDM - --- DSEG SEGMENT > MSG_1 DB 10锛13锛'璇疯緭鍏ヤ竴涓暟瀛楋紙...
  • 鐢ㄦ眹缂栬瑷缂栧啓婧愮▼搴:鐢ㄦ煡琛ㄦ柟娉,灏嗕竴浣鍗佸叚杩涘埗鏁杞崲鎴愬叾ASCII鐮...
    绛旓細mov al,[鍗佸叚杩涘埗鍊糫mov bx,琛ㄩ鍦板潃 xlat 杩欎笁姝ュ嵆鍙娇寰梐l涓殑缁撴灉涓哄搴鍗佸叚杩涘埗鏁鐨凙SCII鐮佷簡銆
  • ...缂栧啓涓涓绋嬪簭,灏AL瀵勫瓨鍣ㄤ腑鐨勪竴浣鍗佸叚杩涘埗鏁杞寲鎴怉SCII鐮 鏄剧ず杈撳嚭...
    绛旓細;灏咥L瀵勫瓨鍣ㄤ腑鐨勪竴浣鍗佸叚杩涘埗鏁杞寲鎴怉SCII鐮侊紝鏄剧ず杈撳嚭銆;鎺ㄨ崘绛旀锛屽啓鐨勫苟闈炴槸涓浣嶃;绋嬪簭濡備笅锛欰SSUME CS:CODE CODE SEGMENT START:MOV AL, 0FH ;鍦ㄨ繖閲屽彲鍐 00H~0FH锛岃繖灏辨槸涓浣16杩涘埗鏁 AND AL, 0FH ;鏃犵敤浣嶆竻闆讹紝淇濈暀璇ユ暟瀛 ;涓嬮潰鏄彉鎴怉SCII鐮 CMP AL, 0AH JB NEXT ADD...
  • 姹囩紪璇█,濡備綍灏杈撳叆鐨鍗佸叚杩涘埗鏁杞崲鎴愬崄杩涘埗鏁拌緭鍑
    绛旓細杈撳叆涓涓浣嶅崄鍏繘鍒舵暟锛屾樉绀虹瓑鍊肩殑鍗佽繘鍒躲傝緭鍏ュ瓧绗︼紝闇瑕佸噺鍘 37H 鎴 30H锛屽彉鎹负鍗佸叚杩涘埗鏁板瓧銆傚啀缁勬垚涓涓浣嶆暟銆傛樉绀轰箣鍓嶏紝鍒欓渶瑕佺浉鍙嶇殑鍙樺寲銆傛湰绋嬪簭鍏锋湁瀵硅緭鍏ユ暟鎹繘琛屽悎娉曟у垽鏂殑鍔熻兘銆傝緭鍏ラ潪鍗佸叚杩涘埗鏁扮殑绗﹀彿鏃讹紝鏈绋嬪簭灏涓嶅仛鍙嶅簲銆
  • 姹囩紪 璇█缂栧啓16杩涘埗涓浣嶆暟鍔犳硶
    绛旓細MSG DB "Please input two numbers between 0 and F:",'$'CONT DB "Do you want to continue?(Y/N)",'$'WARN DB "The number must be between 0 and F!!!",'$'SHOW DB "Let's do addition exercises.",'$'SUM DB ?,?,'$'DATA ENDS EXTRA SEGMENT BUF DB 80 DUP(?)EXTRA ...
  • 鐢ㄦ眹缂栬瑷! 缂栦竴绋嬪簭鎶閿叆鐨鍗佸叚杩涘埗鏁杞寲 鎴愬崄杩涘埗鏁般
    绛旓細缂栦竴绋嬪簭鎶閿叆鐨鍗佸叚杩涘埗鏁锛岃浆鍖栨垚鍗佽繘鍒舵暟锛屽苟鍦ㄥ睆骞曚笂鏄剧ず銆傞敭鍏ョ殑鍗佸叚杩涘埗鏁帮紝涓嶉檺浣嶆暟銆傚瓒呭嚭鍥涗綅锛屽彧灏嗘渶鍚庡洓浣嶅仛杞崲骞舵樉绀恒傝嫢閿叆闈炲崄鍏繘鍒舵暟锛屽垯涓嶄簣鏄剧ず锛岀瓑寰呯户缁緭鍏ャ傞敭鍏ュ洖杞︾锛岀粨鏉熻緭鍏ャ傜▼搴忓涓嬶細
  • 姹囩紪璇█缂栧啓涓涓▼搴,瀹炵幇鍗佽繘鍒躲鍗佸叚杩涘埗鍜屼簩杩涘埗涔嬮棿鐨勮浆鎹鐧惧害鐭 ...
    绛旓細2 CALL DSPAXX MOV AH,4CH INT 21H;=== INPUT PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP
  • ...涓篈SCII鐮绋嬪簭,鐢≧2浣滀负鍏ュ彛鍜屽嚭鍙 2銆佷竴涓崟瀛楄妭鍗佸叚杩涘埗鏁杞...
    绛旓細瑙 MOV A,R2 CLR C SUBB A,#0AH ; 鍒ゅ埆鏄惁澶т簬9 MOV A,R2 JC D1_9 ;ADD A,#07H D1_9: ADD A,#30H MOV R2,A RET
  • 姹囩紪璇█ 缁熻16浣嶄簩杩涘埗鏁涓殑1鐨勪釜鏁板苟鏄剧ず
    绛旓細;---鍔熻兘锛鍗佸叚杩涘埗杞负鍗佽繘鍒惰緭鍑 Deci_Output proc near;鍏ュ彛鍙傛暟ax锛宐x=0ah push dx xor dx,dx or ax,ax jz a001 div bx call Deci_Output add dl,'0'push ax mov ah,02h int 21h pop ax a001:pop dx ret Deci_Output endp cseg ends end start ...
  • 鐢ㄦ眹缂栬瑷鍐欑殑绋嬪簭,灏嗗瓨鍦ㄦ暟鎹鐨鍗佸叚杩涘埗鏁杞寲鎴愬崄杩涘埗鏁板苟鏄剧ず鍑烘潵...
    绛旓細绋嬪簭璋冭瘯閫氳繃鍚庝豢鐪燂紝鍏蜂綋濡備笅锛歁OV R0锛孴L0 MOV R1锛孴H0 CLR涓涓 MOV R2锛孉;鍏堟竻闄ょ殑 MOV R3 锛屼竴涓 MOV R4锛孉锛孧OV R5锛岋純16锛屾昏浆鎹鐨16浣鏁板瓧 LOOP锛欳LR鐨凜 MOV A锛孯0;寰呴珮绔暟瀛楄浆鎹㈢殑涓涓禌鎵 RLC A MOV R0锛屼竴涓 MOV A锛孯1鐨 RLC A MOV R1锛孉 <BR / MOV A锛孯4;浣庣鐨...
  • 扩展阅读:十六进制在线转换器 ... 十六进制计算器 ... 二进制对照表大全 ... 十六进制前缀是0还是o ... 十六进制计算在线 ... 十六进制对照表全表 ... 五进制对照表 ... 十六进制翻译文字工具 ... 十六进制对照表转成字母 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网