汇编-输出寄存器的值-输出值
生活随笔
收集整理的這篇文章主要介紹了
汇编-输出寄存器的值-输出值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習匯編有一陣了,已經能夠寫出一些簡單的計算程序(求斐波那契。。。)
今天總結一下令初學者感到頭疼的寄存器值輸出問題
我們知道:
可以看出寄存器值是一個十六位進制的數,我們可以將其每一位都轉成字符進行判斷,完成后使用9號系統功能輸出結果。
此時計算機輸出時以ascll碼為準,所以
要將他顯示出來,就需要將十六進制數轉換為對應位的字符的ASCLL碼存起來,再輸出。
此處16進制為0-9,A-F(a-f)的組合
我們知道0-9的ASCLL碼為48-58
之后的59ascll是冒號“:”
一直到64號
再到65號字符“A”
中間隔了7個無關字符
轉換時我們必須注意
是字符需要對應ascll+7
不是就不管
然后編寫代碼:
需要認識一些關鍵指令
LOOP;循環指令 SHR;邏輯右移指令 CMP;比較指令 JA;cmp,目的操作數高于源操作數時執行跳轉 JB;~低于執行跳轉 DEC;自減指令正式代碼如下:
TEMP是數據區的變量,存輸出字符的。
定義形式:
每次調用下面代碼時,只需要將對應寄存器值賦給AX寄存器
MOV AX,BX;輸出BX,其實也可以是其他變量值,不一定是寄存器值轉換代碼:
MOV SI,OFFSET TEMP+3;輸出的偏移地址XOR CX,CXMOV CL,04HPRINT:MOV DH,AL;邏輯位移,保留低位,CL不能用SHR AX,1SHR AX,1SHR AX,1SHR AX,1AND DH,0FH;取低位ADD DH,30H;變字母CMP DH,':';數字與字母的ascll界限JA IS;高于,是字符JB NO;低于,是數字IS:ADD DH,07H;變字母NO:MOV [SI],DHDEC SILOOP PRINT輸出代碼:
MOV DX,OFFSET TEMPMOV AH,09HINT 21H輸出示例:
輸出了AX=6FF1的值
完成。
加油!
總結
以上是生活随笔為你收集整理的汇编-输出寄存器的值-输出值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows-vscode编写c/c+
- 下一篇: oracle使用sqlplus工具命令连