前言
作為一名在校大學(xué)生,我將近期所學(xué)的知識進(jìn)行總結(jié)。
一年之后我再看這些代碼,我發(fā)現(xiàn)這些代碼對于初學(xué)者十分友好。因此,我將這些代碼分享給大家,希望大家能有所收獲。如有不足,歡迎交流。
推薦可以看這位B站up主的視頻學(xué)習(xí)匯編
B站up主
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、利用DOS調(diào)用實(shí)現(xiàn)簡單的加法
2.1題目要求
(1)輸出提示信息“Please input A” (功能號09H)
(2)利用 01H功能,獲取輸入 A
(3)對輸入A進(jìn)行處理實(shí)現(xiàn)ASCII碼到數(shù)值的轉(zhuǎn)換
(4)輸出提示信息“Please input B”
(5)利用 01H功能,獲取輸入 B
(6)對輸入B進(jìn)行處理實(shí)現(xiàn)ASCII碼到數(shù)值的轉(zhuǎn)換
(7)計(jì)算A+B并實(shí)現(xiàn)十六進(jìn)制數(shù)到BCD碼的轉(zhuǎn)換
(8)將BCD碼轉(zhuǎn)換為ASCII碼,并利用02H功能進(jìn)行顯示
2.1程序代碼和運(yùn)行結(jié)果
2.1代碼如下(示例):
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIPS1 DB 'Please input A',0DH,0AH,'$' ;TIPS(提示信息)
;ODH 回車 ;0AH換行
TIPS2 DB 'Please input B',0DH,0AH,'$'
TIPS3 DB 'RESULT IS',0DH,0AH,'$'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;數(shù)據(jù)A的輸入
MOV DX,OFFSET TIPS1
MOV AH,09H ;利用09H的功能,將提示信息顯示出來
INT 21H
MOV AH,01H ;利用01H的功能,讀取一個字符
INT 21H
AND AL,0FH ;因?yàn)樗且粋€ascall值,所以將高四位屏蔽,只保留低四位
MOV BL,AL ;將數(shù)據(jù)暫存放到 BL 當(dāng)中
;數(shù)據(jù)B的輸入
MOV DL,0DH ;回車
MOV AH,02H
INT 21H
MOV DL,0AH ;換行
MOV AH,09H
INT 21H
MOV DX,OFFSET TIPS2
MOV AH,09H ;利用09H的功能,將提示信息顯示出來
INT 21H
MOV AH,01H ;利用01H的功能,讀取一個字符
INT 21H
AND AL,0FH ;因?yàn)樗且粋€ascall值,所以將高四位屏蔽,只保留低四位 數(shù)據(jù)暫存放到 AL 當(dāng)中
ADD AL,BL ;A+B
MOV AH,00H ;AH清0
AAA ;將計(jì)算結(jié)果換為非壓縮的BCD碼的形式
ADD AX,3030H ;將數(shù)據(jù)轉(zhuǎn)化為ASCALL碼
MOV BX,AX ;將數(shù)據(jù)暫存放到BX
;結(jié)果顯示
MOV DL,0DH ;回車
MOV AH,02H
INT 21H
MOV DL,0AH ;換行
MOV AH,09H
INT 21H
MOV DX,OFFSET TIPS3 ;提示信息
MOV AH,09H
INT 21H
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
;退出DOS
MOV AH,4CH
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
2.1運(yùn)行結(jié)果
二、求某數(shù)據(jù)區(qū)內(nèi)負(fù)數(shù)的個數(shù)
2.2題目要求
設(shè)數(shù)據(jù)區(qū)的BUF中存放著N+1個單字節(jié)數(shù)據(jù),第一個字節(jié)存放數(shù)據(jù)長度N。從第二個字節(jié)開始依次存放著N個數(shù)據(jù)。設(shè)計(jì)程序根據(jù)數(shù)據(jù)最高位是否為1,統(tǒng)計(jì)N個數(shù)據(jù)中有多少個負(fù)數(shù),將結(jié)果存放在RESULT單元中。
2.2程序代碼和運(yùn)行結(jié)果
2.2代碼如下(示例):
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BUF DB 10 ;定義了10個數(shù)字
DB 2,3,6,-45,-78,-9,3,5,-10,9 ;10個數(shù)分別是
result DB 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SI,OFFSET BUF ;將BUF首地址送給SI
MOV CH,00H ;題目要求,第一個數(shù)是指循環(huán)的次數(shù),因此應(yīng)該放到CX寄存器中
MOV CL,[SI] ;但是CX是一個字,BUF是一個字節(jié),會被轉(zhuǎn)化為字在給CX賦值
INC SI ; SI++
MOV BL,00H ;BL清0
xh:MOV AL,[SI]
CMP AL,80H ;判斷AL里面值的大小
JB zhengshu ;小于80H說明是正數(shù),不用操作
INC BL ;BL用于統(tǒng)計(jì)負(fù)數(shù)的個數(shù)。因此BL++
zhengshu:INC SI ;正數(shù)的,SI的地址++
LOOP xh
MOV result,BL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
2.2運(yùn)行結(jié)果
三、編寫一個循環(huán)結(jié)構(gòu)的程序
2.3題目要求
請編寫一個循環(huán)結(jié)構(gòu)的程序,通過使用02H號功能調(diào)用,依次在屏幕上顯示26個英文字母的大寫形式。并且在顯示字符之間加入空格
2.3程序代碼和運(yùn)行結(jié)果
2.3代碼如下(示例):
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV CX,26 ;控制循環(huán)次數(shù)
MOV BL,00H ;讓字母變換的變量
xh:
MOV DL,'A'
ADD DL,BL
MOV AH,02H
INT 21H
INC BL ;將BL加1,使其顯示字母發(fā)生改變
MOV DL,' ' ;使顯示的字母中間有空格
MOV AH,02H
INT 21H
LOOP xh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
2.3運(yùn)行結(jié)果
四、由鍵盤輸入一個字母的小寫形式,將其變換為大寫形式輸出。
2.4題目要求
(1)將程序設(shè)計(jì)為一個循環(huán)結(jié)構(gòu)可以不停的對輸入字符進(jìn)行轉(zhuǎn)換
(2)設(shè)置一個終止字符‘#’當(dāng)輸入時可以停止轉(zhuǎn)換
(3)可以對輸入數(shù)據(jù)的格式進(jìn)行判斷如果不是小寫字母,則重新輸入
2.4程序代碼和運(yùn)行結(jié)果
2.4代碼如下(示例):文章來源:http://www.zghlxwxcb.cn/news/detail-769898.html
DATA SEGMENT ;數(shù)據(jù)段
MESS DB 0DH,0AH,'PLEASE INPUT A LETTER',0DH,0AH,'$'
DATA ENDS
EXTRA SEGMENT ; ;附加段
EXTRA ENDS
;
STACK SEGMENT PARA STACK ‘STACK’ ;堆棧段
STAPN DB 100 DUP (00H) ;定義100字節(jié)空間
TOP EQU LENGTH STAPN
STACK ENDS
CODE SEGMENT
MAIN PROC FAR ;過程定義語句
;說明4個段寄存器分別與哪些段有關(guān)
ASSUME CS:CODE, DS:DATA,ES:EXTRA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX, EXTRA
MOV ES,AX
MOV AX,STACK
MOV SS,AX
M_START : MOV DX,OFFSET MESS
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'#'
JE M_OUT
CMP AL,'a'
JB M_START
CMP AL,'z'
JA M_START
SUB AL,20H
MOV DL,AL
MOV AH,02H
INT 21H
JMP M_START
M_OUT: MOV AX,4C00H
INT 21H
RET
MAIN ENDP ;MAIN過程結(jié)束
CODE ENDS ;代碼段結(jié)束
END MAIN ;整個源代碼結(jié)束
2.4運(yùn)行結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-769898.html
到了這里,關(guān)于微機(jī)實(shí)驗(yàn)第二章:循環(huán)、分支程序和常用的DOS功能調(diào)用(B站)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!