实验一 分支程序设计
示例实验
.model tiny
.stack 100
.data
x DB -21
eve DB 0ah,0dh,"It's even number",0ah,0dh,'$'
ODD DB 0ah,0dh,"It's Odd number",0ah,0dh,'$'
.code
start:mov ax,@data
mov ds,ax
test x,1
JZ EVN
LEA DX,ODD
JMP DONE
EVN: LEA DX,EVE
DONE: MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
END START
用分支结构实现对一个数据大于、小于或等于零的判断,并将结果输出到显示器上
.MODEL TINY
.STACK 100
.DATA
X DB 8
GREAT DB 0AH, 0DH, "It's > 0 number.", 0AH, 0DH, '$'
LESS DB 0AH, 0DH, "It's < 0 number.", 0AH, 0DH, '$'
ZR DB 0AH, 0DH, "It's = 0 number.", 0AH, 0DH, '$'
.CODE
START: MOV AX, @DATA
MOV DS, AX
CMP X, 0
JGE GRO
NA: LEA DX,LESS
JMP DONE
GRO: JE ZO
LEA DX, GREAT
JMP DONE
ZO: LEA DX,ZR
DONE: MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
END START
实验二 循环程序设计
示例程序
.MODEL TINY
.STACK 100
.DATA
LIST DW 20,25,-70,15,200,-30,-75,103,90,36
SUM DD 0
AVG DW ?
.CODE
START:MOV AX,@DATA
MOV DS,AX
MOV BX,0
MOV CX,10
ONE:MOV AX,LIST[BX]
CWD
MOV DX,0
ADD WORD PTR[SUM],AX
ADD WORD PTR[SUM+2],DX
INC BX
INC BX
LOOP ONE
MOV DX,WORD PTR[SUM+2]
MOV AX,WORD PTR SUM
MOV BX,10
IDIV BX
MOV AVG,AX
MOV AX,4C00H
INT 21H
END START
在此循环程序基础上增加求最大值和最小值的功能
实验三 子程序设计实验
示例程序
.MODEL TINY
.STACK 100
.DATA
msg1 DB 'Please Input A String',0DH,0AH,'S'
msg2 DB 100 DUP(0FFH)
.CODE
START:MOV AX,@DATA
MOV DS,AX
MOV AH,00H
INT 10H ;清屏
CALL OPT_1;输出26个字母
CALL CR_LR
MOV AH,09H;显示msgl
LEA DX,msg1
INT 21H
CALL I0_1;输入字符并回显
Exit: MOV AH,4CH
INT 21H
OPT_1 PROC NEAR;输出26个字母
NOP
RET
OPT_1 ENDP
I0_1 PROC NEAR;输入字符并回显
NOP
RET
I0_1 ENDP
CR_LR PROC NEAR;回车换行
NOP
RET
CR_LR ENDP
END START
补全示例代码的功能,实现如下功能:
(1)显示26个‘A’-‘Z’英文字母(2)显示一个字符串(3)输入一个字符串,再回显。
.MODEL TINY
.STACK 100
.DATA
msg1 DB 'Please Input A String',0DH,0AH,'$'
msg2 DB 100 DUP(0FFH)
.CODE
START:
MOV AX,@DATA
MOV DS,AX
MOV AH,00H
INT 10H ; 清屏
CALL OPT_1 ; 输出26个字母
CALL CR_LR ; 回车换行
MOV AH,09H ; 显示msg1
LEA DX,msg1
INT 21H
CALL I0_1 ; 输入字符并返回显示
Exit:
MOV AH,4CH
INT 21H
OPT_1 PROC NEAR
; 输出26个字母的代码
MOV CX, 26 ; 循环计数器
MOV DL, 'A' ; 要输出的字母
PrintLoop:
MOV AH, 02H ; 功能号:显示字符
INT 21H ; 调用DOS中断
INC DL ; 下一个字母
LOOP PrintLoop ; 继续循环输出
RET
OPT_1 ENDP
I0_1 PROC NEAR
LEA DX,MSG2
MOV AH,0AH
MOV AL,00H
INT 21H
CALL CR_LR
MOV AH,09H
INC DX
INC DX
INT 21H
RET
I0_1 ENDP
CR_LR PROC NEAR
PUSH DX
MOV AH, 02H ; 功能号:显示字符
MOV DL, 0DH ; 回车符
INT 21H ; 调用DOS中断
MOV DL, 0AH ; 换行符
INT 21H ; 调用DOS中断
POP DX
RET
CR_LR ENDP
END START
实验四 8255选通输入
实验要求:
使并行接口芯片8255的端口B工作在方式1选通输入状态,端口A工作在方式0输出状态,通过B端口读入开关量数据,并将读入数据写入A端口控制发光管。
实验代码:
.MODEL TINY
CTRL_ADD EQU 0273H
PA_ADD EQU 0270H ;A端口地址
PB_ADD EQU 0271H ;B端口地址
PC_ADD EQU 0272H ;C端口地址
.STACK 100
.DATA
.CODE
START: MOV DX,CTRL_ADD
MOV AL,87H ;1 00 0 0111
OUT DX,AL ;写控制字
;读C口
INPC: MOV DX,PC_ADD
IN AL,DX ;读C端口地址
TEST AL,2 ;判断PC1
JZ INPC ;PC1=0
MOV DX,PB_ADD
IN AL,DX ;读B端口
MOV CX,0FFFFH ;延时
ONE: LOOP ONE
MOV DX, PA_ADD
OUT DX,AL ;写入A口
JMP INPC
END START