前言
作為一名在校大學生,我將近期所學的知識進行總結。
一年之后我再看這些代碼,我發(fā)現這些代碼對于初學者十分友好。因此,我將這些代碼分享給大家,希望大家能有所收獲。如有不足,歡迎交流。
推薦可以看這位B站up主的視頻學習匯編
B站up主
提示:以下是本篇文章正文內容,下面案例可供參考
一、拆字程序
題目要求
例如:單元data的內容為27H,將其高、低兩位拆出后,分別存放到dataH和dataL中。編寫程序,執(zhí)行后,dataL 的內容應為低位07H,dataH的內容應為高位02H。
程序代碼和運行結果
1.1代碼如下(示例):
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
var DB 27H
varL DB 00H
varH DB 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,var ;取變量的低4位
AND AL,0FH
MOV varL,AL
MOV AH,var ;取變量的高四位
AND AH,0F0H ;不能以字母直接開頭,要加0
SHR AH,4 ;右移四位,不然 varH 就變成02H
MOV varH,AH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.1運行結果
二、拼字程序
題目要求
例如:將兩個地址單元dataH和dataL中存放的數字,理解為一個兩位16進制數的高、低
位,通過拼字,將其組裝為一個數。并存入data中。
dataL的內容為低位07H,dataH的內容為高位02H,單元data用于存放拼字的結果,編程執(zhí)行效果,應在data單元中存儲數據27H。
程序代碼和運行結果
1.2程序代碼
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
varL DB 07H
varH DB 02H
var DB 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,varL
MOV var,AL ;將低位數據的值賦值var
MOV AL,varH ;將高位數據的值賦值var
SHL AL,4 ;將低四位數字移到高四位
ADD var,AL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.2運行截圖
三、計算表達式
題目要求
編寫程序實現 W=((B1+B2-B3)/B4*B5)2 , Bi為字節(jié)型變量,W為雙字變量,不考慮溢出問題。
程序代碼和運行結果
1.3程序代碼
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
B1 DB 12H
B2 DB 1CH
B3 DB 1FH
B4 DB 03H
B5 DB 4AH
W DD ? ;題目要改成雙字
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,B1
ADD AL,B2
SUB AL,B3 ;AL=B1+B2-B3
XOR AH,AH ;AH清0 因為被除數要放入AH中
DIV B4 ;默認被除數是在AX當中的
;除數在B4 結果:商在AL 余數在AH中
MUL B5 ;字節(jié)*字節(jié) == 字
;結果為字 就要按照字的乘法進行處理
MUL AX ;( (B1+B2-B3) /B4*B5 )^2
MOV W,AX ;存放低字節(jié)
MOV W+2,,DX ;存放高字節(jié)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.3運行結果
四、計算表達式
題目要求
已知當前數據段中有一個十進制數字0-9的7段代碼表,其數值分別為40H,79H,24H,30H,19H,12H,02H,78H,00H,18H,要求利用XLAT指令,將十進制數字57轉換成相應的7段代碼值,存到BX寄存器中,寫出響應的程序段。
程序代碼和運行結果
1.4程序代碼文章來源:http://www.zghlxwxcb.cn/news/detail-742277.html
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
table DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18H
var DB 57H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV AL,var
AND AL,0F0H
SHR AL,4
MOV BX,OFFSET table
XLAT ;查找高四位
MOV DH,AL ;將高四位賦值到DH中
MOV AL,var
AND AL,0FH
XLAT ;查找低四位
MOV DL,AL ;將低四位賦值到DL中
MOV BX,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
1.4運行結果文章來源地址http://www.zghlxwxcb.cn/news/detail-742277.html
到了這里,關于微機實驗第一章:匯編程序的建立和簡單的順序結構匯編程序設計(B站)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!