汇编语言与接口技术实验

文章介绍了四个编程实验:分支程序设计(判断数据),循环程序设计(计算和查找最大值/最小值),子程序设计(显示字母和输入字符串),以及8255选通输入(I/O控制)。每个实验展示了基本的编程技巧和硬件接口操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验一  分支程序设计

示例实验

.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值