?? sy94.asm
字號:
data segment
value2 dw 4811
str db 4 dup (30h),13,10 ;定義一個str數組存放要輸出的16進制字符串,后面加回車換行
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax ;裝入段地址
;下面依據value2在內存中是以補碼形式存放的特點,四位一組取出對應的十進制值給str
mov ax,value2 ;取出value2的值給ax
mov bx,offset str+4-1 ;取出str的第四個元素偏移地址給bx
mov cl,4 ;因為后面要右移四位,所以將4賦值給cl
again:
mov dx,ax ;后面要改變ax的值,所以先送入dx保存
and dl,0fh ;相與取出dx中的最低四位,即一個16進制數
mov byte ptr [bx],dl ;將取出的數送入str保存
shr ax,cl ;邏輯右移為下次取一個16進制數做準備
dec bx ;因為是從低位向高位取,bx減1,按照存儲器的高高低低原則
cmp ax,00 ;判斷ax是否為0,
jnz again ;不為0繼續取有效位
;下面是將取到的每一位十進制數轉化成對應十六進制數的ASCII碼
mov bx,offset str ;取要轉化的字符串的偏移地址
mov cx,4 ;對應四個16進制數的ASCII碼
l:
mov dl,byte ptr [bx] ;取出一個對應的十進制數值給dl進行處理
cmp dl,0ah ;與10比較判斷
jb next ;當小于10時轉移到next
add dl,7h ;否則dl中的值加7
next:
add dl,30h ;給dl中的值加30h
mov byte ptr [bx],dl ;將得到的對應16進制數的ASCII碼再送入str數組保存,為輸出作準備
inc bx ;str的偏移地址加1
loop l ;cx不為0繼續循環處理
;下面是真正輸出value2對應的16進制字符串形式
mov cx,6
mov bx,offset str
pp:
mov dl,byte ptr [bx]
mov ah,2
int 21h
inc bx
loop pp
;輸出結束,返回dos
mov ah,4ch
int 21h
code ends
end start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -