1.一個字節(jié)表示一個十進制數(shù)(非壓縮BCD碼)
15存儲的形式為0000 0001 0000 0101
- 加上3030h
- 3135h高低字節(jié)輸出就是15
0000 1111
- 除--商--1
- ?30h輸出
- 除--取余--5
- ?30h輸出
2.轉(zhuǎn)移指令和位操作指令
- 無條件轉(zhuǎn)移指令。Jmp理解掌握段內(nèi)尋址和段間尋址方式
- 條件轉(zhuǎn)移指令,無符號數(shù)比較轉(zhuǎn)移,帶符號數(shù)比較轉(zhuǎn)移,cx為0轉(zhuǎn)移指令(jcxz)
- 【注意??】這些都為短轉(zhuǎn)移指令,當代碼過長超出-128-127的的轉(zhuǎn)移范圍,學會使用無條件指令作為中間橋梁完成相應的功能
16進制:0~65535
65535
內(nèi)存中存儲方式1111 1111 1111 1111
16進制數(shù) ffff
-
1234h
- 0001 0010 0011 0100
- 循環(huán)右移(先低位)0100 0001 0010 0011
- 左 0010 0011 0100 0001
- 與 0000 0000 0000 1111
- 0 0 0 1
rol 大于4位的就進行轉(zhuǎn)移
LST文件中查看
-
euq定義的是一個常量
- db、dw開辟的都是在內(nèi)存中占用空間,但是equ在內(nèi)存中并不占用空間
- count que(&-t)表中的字所占用的字節(jié)個數(shù)
注意這是字節(jié)的個數(shù)(找字/2)
注意 一個字占兩個字節(jié) add si,2
&--當前位置
'&'--字符
1.十進制數(shù)轉(zhuǎn)換為十六進制數(shù)輸出

image

image

image
data segment
t dw 1234h,65535,345,234,6765,111,3,2,4565,1,2346,898,10
count equ($-t)/2 ;計算t的長度,共有幾個部分
table db '0123456789ABCDEF' ;用于二進制計算后對應過來找16進制數(shù)
temp dw ? ;用于儲存
info db 0dh,0ah,'HEX = $';HEX的意思是16進制數(shù)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bp,count ;儲存大循環(huán)的次數(shù)-bp
mov si,0 ;用于將t[0]第一個給bx
out1:
mov dx,offset info ;將提示信息輸出
mov ah,9
int 21h
mov bx,t[si] ;將t[0]第一個給bx
mov ch,4 ; 循環(huán)次數(shù):16進制,需要循環(huán)4次
in1:
mov cl,4 ;大于兩位都需要 借助 寄存器 進行轉(zhuǎn)移
rol bx,cl ; 移動,將最左邊的4個移到最右邊
mov [temp],bx ;將 移動后的bx 放到 temp 中
and bx,0fh ;進行AND操作,除了末后四位,剩下的清零屏蔽,畢竟16 進制
mov dl,table[bx] ;在table表中找到對應的16進制數(shù)
mov ah,2
int 21h ;輸出一個字符
mov bx,[temp] ; 每次移動后的temp
dec ch ; ch每次都自減,用于循環(huán)判斷
jnz in1 ; ch 為0 說明,輸出夠4位了->結(jié)束,否則繼續(xù)進行右移轉(zhuǎn)換
add si,2 ;進入下一個 字 的十六進制轉(zhuǎn)換
dec bp ;循環(huán)次數(shù)自減
jnz out1 ;再次進入大循環(huán)
mov ah,4ch
int 21h
code ends
end start
2.十進制數(shù)轉(zhuǎn)換為二進制數(shù)輸出

image

image
data segment
t dw 1234h,65535,345,234,6765,111,3,2,4565,1,2346,898,10
count equ($-t)/2 ;計算t的長度,共有幾個部分
table db '01' ;用于二進制顯示
temp dw ? ;用于儲存
info db 0dh,0ah,'BIN = $'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bp,count ;儲存大循環(huán)的次數(shù)-bp
mov si,0 ;用于將t[0]第一個給bx
out1:
mov dx,offset info
mov ah,9
int 21h
mov bx,t[si]
mov ch,16 ; 循環(huán)次數(shù):2進制,需要循環(huán)16次
in1:
rol bx,1 ; 移動,將最左邊的4個移到最右邊
mov [temp],bx ;將已經(jīng)移動了的bx放到temp中
and bx,01h ;進行AND操作,除了末后四位,剩下的清零屏蔽,畢竟16 進制
mov dl,table[bx] ;在table表中找到對應的2進制數(shù)
mov ah,2
int 21h ;輸出一個字符
mov bx,[temp] ; 每次移動后的temp
dec ch ; ch每次都自減,用于循環(huán)判斷
jnz in1 ; ch 為0 說明,輸出夠4位了,結(jié)束
add si,2
dec bp
jnz out1
mov ah,4ch
int 21h
code ends
end start
3.課本99頁,計算Y=5X-Y,求絕對值,并顯示十進制結(jié)果

image
data segment
X db -6 ; x 定義為字
Y dw ? ; y定義為字節(jié)
cc db 0ah,0dh,'Y= $ '
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax ;將數(shù)據(jù)段段地址賦值給ds
mov al,5
imul X ;ax=5X
sub ax,18 ;ax=5X-18
jns let0 ;結(jié)果不為負 則轉(zhuǎn)移
neg ax ;結(jié)果為負 則求其絕對值-- 求補運算
let0:
mov Y,ax ;保存結(jié)果
;將ax中的二進制數(shù)變?yōu)槭M制數(shù),并顯示
mov cx,0
mov bx,10
let1:
mov dx,0
inc cx ;統(tǒng)計余數(shù)個數(shù)
idiv bx ;ax/10 商在ax,余數(shù)在dx
push dx ;保存余數(shù)
cmp ax,0 ;商為0 則退出循環(huán)
jnz let1 ;結(jié)果不為0,則繼續(xù)進入let1中進行循環(huán),與cmp指令連用
mov dx,offset cc
mov ah,9
int 21h ;利用9號功能將cc提示進行顯示
let2: ;循環(huán)執(zhí)行cx次,顯示十進制結(jié)果
pop ax ;將余數(shù)彈入ax中
add ax,0030h ;調(diào)整為ascii
mov dl,al ;調(diào)用2號功能顯示一個字符,一個一個進行輸出
mov ah,2
int 21h
dec cx ;像是一個則進行自減
cmp cx,0
jnz let2
mov ah,4ch
int 21h
code ends
end start
4.使用菜單顯示(普通跳轉(zhuǎn))

image
鍵盤控制輸出類型

image

image

image
data segment
t dw 1234h,65535,345,234,6765,111,3,2,4565,1,2346,898,10
count equ($-t)/2 ;計算t的長度,共有幾個部分
HEXMap db '0123456789ABCDEF' ;用于對應過來找16進制數(shù)
HEXSave dw ? ;用于儲存二進制
HEXMessage db 0dh,0ah,'BIN = $'
BINMap db '01' ;用于對應過來找2進制數(shù)
BINSave dw ? ;用于儲存
BINMessage db 0dh,0ah,'HEX = $';HEX的意思是16進制數(shù)
info db 0dh,0ah,'Welcome to here : 1-HEX ,2-BIN => your choice: $'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bp,count ;儲存大循環(huán)的次數(shù)-bp
mov si,0 ;用于將t[0]第一個給bx
main:
mov dx,offset info ;提示信息
mov ah,9
int 21h
mov ah,1 ;輸入choice
int 21h
sub al,30h ;鍵盤輸入1,電腦存儲的是31h,所以需要減去30h
cmp al,1
jz HEX ;1 - 十六進制
cmp al,2
jz BIN ;2 - 二進制
HEX:
mov bp,count
mov si,0
HEXBig:
mov dx,offset HEXMessage
mov ah,9
int 21h
mov bx,t[si]
mov ch,4
HEXSmall:
mov cl,4
rol bx,cl
mov [HEXSave],bx
and bx,0fh
mov dl,HEXMap[bx]
mov ah,2 ;輸出一個字符
int 21h
mov bx,[HEXSave]
dec ch
jnz HEXSmall ;結(jié)果不為0,則轉(zhuǎn)移
add si,2
dec bp
jnz HEXBig ;結(jié)果不為0,繼續(xù)進入大循環(huán)
jmp main
BIN:
mov bp,count
mov si,0
BINBig:
mov dx,offset BINMessage
mov ah,9
int 21h
mov bx,t[si]
mov ch,16
BINSmall:
rol bx,1
mov [BINSave],bx
and bx,01h
mov dl,BINMap[bx]
mov ah,2
int 21h
mov bx,[BINSave]
dec ch
jnz BINSmall
add si,2
dec bp
jnz BINBig ;結(jié)果不為0,繼續(xù)進入大循環(huán)
jmp main
code ends
end start

image

image

image