我有一个代码,读取一个包含8个字符的字符串并打印出来 我需要将字符串转换为十六进制,然后打印每个字符的十六进制代码。
到目前为止,这是我的代码:
dosseg
.model small
.stack 100h
.data
texto db "Enter:",13,10,'$'
maximo db 9
caractereslidos db 0
string db 9 DUP (0)
novalinha db 13,10, '$'
.code
start:
mov AX,@data
mov DS,AX
mov AH,9
lea DX, texto
int 21h
mov AH,0Ah
lea DX,maximo
int 21h
mov AH,9
lea DX,novalinha
int 21h
mov CL, caractereslidos
xor SI,SI
mov AH,2
ciclo:
mov DL, string[SI]
ADD DL, 30h
CMP DL, 39h
int 21h
inc SI
loop ciclo
mov AH,4Ch
int 21h
end start
有人可以帮帮我吗?
答案 0 :(得分:0)
接下来是您的代码,稍作修改。分离的过程(在底部)将DL转换为十六进制。字符已转换并显示在循环中。我使用了EMU8086,只需复制粘贴下一个代码然后运行:
.model small
.stack 100h
.data
texto db 'Enter: $'
maximo db 9
caractereslidos db 0
string db 9 DUP (0)
novalinha db 13,10,13,10,'$'
hex1 db ? ;FIRST HEX DIGIT.
hex2 db ' , $' ;SECOND HEXT DIGIT.
.code
mov AX, @data
mov DS, AX
mov AH, 9
lea DX, texto
int 21h
mov AH, 0Ah
lea DX, maximo
int 21h
mov AH, 9
lea DX, novalinha
int 21h
mov CL, caractereslidos
mov ch, 0 ;CLEAR CH TO USE CX AS COUNTER.
mov SI, offset string
ciclo:
;GET ONE CHARACTER FROM STRING.
mov DL, [SI]
;ISOLATE LOWER 4 BITS IN CHARACTER.
and DL, 00001111b
call convert ;CONVERT DL TO DIGIT OR LETTER.
mov hex2, dl ;SAVE CONVERTED CHARACTER TO DISPLAY LATER.
;GET THE SAME CHARACTER FROM STRING.
mov DL, [SI]
;ISOLATE UPPER 4 BITS IN CHARACTER.
shr DL, 4 ;SHIFT DL 4 BITS TO THE RIGHT.
call convert ;CONVERT DL TO DIGIT OR LETTER.
mov hex1, dl ;SAVE CONVERTED CHARACTER TO DISPLAY LATER.
;DISPLAY CONVERTED CHARACTER.
mov ah, 9
mov dx, offset hex1
int 21h
inc si ;NEXT CHARACTER TO CONVERT.
loop ciclo
mov AH,4Ch
int 21h
;--------------------------------------------------------
;CONVERT DL TO HEX CHARACTER.
proc convert
cmp DL, 9
jbe its_a_digit ;JUMP IF ( DL <= 9 ).
;its_a_letter: IF NO JUMP, STAYS HERE.
add dl, 55 ;CONVERT TO LETTER.
jmp finish
its_a_digit:
add dl, 48 ;CONVERT TO DIGIT.
finish:
ret
endp
例如,如果输入“Abc”,程序将显示“41,61,63”。