一. 实验要求
将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以 DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。 二、实验目的
1.学习数据传送和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,38H ;第一个数据(作为被减数) DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为减数) MES1 DB '-','$' MES2 DB '=','$' DATA ENDS
STACK SEGMENT ;堆栈段 STA DB 20 DUP(?)
TOP EQU LENGTH STA
STACK ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX
MOV AX,STACK MOV SS,AX MOV AX,TOP MOV MOV MOV CALL MOV LEA INT MOV MOV CALL MOV LEA INT MOV MOV CALL MOV MOV CALL MOV MOV INT MOV MOV INT INT MOV INT DISPL PROC DSI: MOV MOV INT DEC JNZ RET
SP,AX
SI,OFFSET DATA1 BX,05
DISPL ;显示被减数 AH,09H DX,MES1 21H
SI,OFFSET DATA2
BX,05 ;显示减数 DISPL AH,09H DX,MES2 21H
SI,OFFSET DATA1 DI,OFFSET DATA2
SUBA ;减法运算 SI,OFFSET DATA1
BX,05 ;显示结果 DISPL DL,0DH AH,02H 21H DL,0AH AH,02H 21H 21H
AX,4C00H 21H
NEAR ;显示子功能 AH,02
DL,[SI+BX-1] ;显示字符串中一字符21H
BX ;修改偏移量 DSI DISPL ENDP
SUBA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05
SU1: SUB BYTE PTR[SI+BX-1],30H SUB BYTE PTR[DI+BX-1],30H
DEC BX ;将ASCII 码表示的数字串 JNZ SU1 ;转化为十六进制的数字串 MOV SI,DX MOV DI,BP
MOV CX,05 ;包括进位,共5位 CLC ;清进单位 SU2: MOV AL,[SI] MOV BL,[DI]
SBB AL,BL ;带进位相减
AAS ;非组合BCD码的减法调整 MOV [SI],AL ;结果送被减数区 INC SI
INC DI ;指向下一位 LOOP SU2 ;循环 MOV SI,DX MOV DI,BP MOV BX,05
SU3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H
DEC BX ;十六进制的数字串转化ASCII码表示的数字串 JNZ SU3 RET SUBA ENDP CODE ENDS END START
实验二 两个数相乘的实验
一. 实验要求
实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果 在屏幕上显示出来。 二. 实验目的
掌握乘法指令和循环指令的用法。
DATA SEGMENT
DATA1 DB 32H,39H,30H,35H,34H DATA2 DB 34H MES1 DB '*','$' MES2 DB '=','$'
RESULT DB 6 DUP (00H) DATA ENDS
STACK SEGMENT
STA DB 20 DUP (?)
TOP EQU LENGTH STA STACK ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP LEA SI,DATA1 MOV BX,05H L1: MOV AH,02H
MOV INT DEC JNZ MOV LEA INT LEA MOV MOV INT MOV LEA INT MOV MOV AND MOV MOV MOV LOOP1: MOV AND INC MUL AAM ADD AAA MOV INC MOV LOOP MOV MOV DISPL: MOV MOV DL,[SI+BX-1] 21H
BX L1
AH,09H DX,MES1 21H
SI,DATA2 AH,02H DL,[SI] 21H
AH,09H DX,MES2 21H
SI,OFFSET DATA2 ;显示算式
BL,[SI] ;乘数DATA2→BL
BL,00001111B ;屏蔽高4位,ASCII码转化为十六进制数 SI,OFFSET DATA1 DI,OFFSET RESULT CX,05 AL,[SI]
AL,00001111B ;取被乘数DATA1,ASCII变十六进制数 SI ;指向被乘数1的下一字符单元 BL ;相乘
;AAM调整
AL,[DI] ;结果低位与前次计算的进位相加 ;AAA调整 [DI],AL
DI ;结果送存到下一单元 [DI],AH
LOOP1 ;计算结果高位进位送存 CX,06 SI,DI AH,02 DL,[SI]
ADD DL,30H INT 21H DEC SI
LOOP DISPL ;显示结果 MOV AX,4C00H INT 21H ;结束 CODE ENDS END START
实验三 BCD码相乘的实验
一. 实验要求
实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内
存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用 将乘数1作为计算器,累加另一个乘数的方法得到计算结果。 二. 实验目的
掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。
DATA SEGMENT FIRST DB 99H SECOND DB 25H
THIRD DB 2 DUP(?) MES1 DB '*','$' MES2 DB '=','$' DATA ENDS
STACK SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?) TOP EQU LENGTH STAPN STACK ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV BL,FIRST ;被乘数送BL MOV CL,SECOND ;乘数送CL MOV DX,0 ;部分积清0 MOV AL,BL
AGAIN: OR AL,AL JZ DONE MOV AL,DL ADD AL,CL DAA MOV DL,AL MOV AL,DH ADC AL,0 DAA MOV DH,AL MOV AL,BL DEC AL DAS MOV BL,AL JMP AGAIN DONE: LEA BX,THIRD MOV [BX],DX LEA SI,FIRST CALL DIS XOR AX,AX MOV AH,09H LEA DX,MES1 INT 21H LEA SI,SECOND CALL DIS XOR AX,AX LEA DX,MES2 MOV AH,09H INT 21H LEA SI,THIRD INC SI CALL DIS DEC SI CALL DIS
;被乘数减到0则转结果显示 ;乘数于部分积低位相加后调整 ;往部分积高位送进位后调整 ;组合BCD码减法调整 ;* ;= MOV AX,4C00H ;返回DOS INT 21H
DIS PROC NEAR ;显示子程序 MOV AL,[SI] MOV CL,04H SHR AL,CL ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,[SI] AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,02H INT 21H RET DIS ENDP CODE ENDS END START
实验一 双色灯实验
一、实验要求
编写程序,以8255为输出口,控制四个双色灯按要求发光。 二、实验目的
1.学习单板方式下扩展简单I/O接口的方法以双色灯的使用。 2.进一步学习微处理器的编程技术。 三、实验电路连线
8255的CS片选接至适配板上138译码处的200H~207H插孔。 四、实验说明
1、 因为本实验是模拟交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一 个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通 车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,
东西仍然红灯。再转状态,东西绿灯通车,南北灯灯。过一段时间转状态4,东西绿灯闪几 次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。
2、 双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当 红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平 时,绿灯亮;两端都加高电平时,黄灯亮。
;实验一 双色灯实验 D1 EQU 10H D2 EQU 200H DATA SEGMENT PB DB ? DATA ENDS
STACK SEGMENT STACK STA DW 50 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
PUSH CS POP DS
MOV DX,203H ;设置为全输出 MOV AL,80H OUT DX,AL MOV MOV OUT MOV MOV OUT MOV CALL BG: MOV OUT MOV CALL MOV XH1: AND OUT MOV CALL OR OUT MOV CALL LOOP OR OUT MOV CALL MOV CALL MOV OUT MOV CALL MOV XH2: AND OUT DX,200H AL,0ffh
DX,AL ;清LED DX,200H AL,0F0H
DX,AL ;全红 BX,7fH DLY
AL,01011010B ;南北绿,东西红DX,AL BX,D2 DLY CX,03H
AL,0F5H ;绿灭黄亮 DX,AL BX,D1 DLY
AL,0aH ;绿亮 DX,AL BX,D1 DLY XH1
AL,0a0H ;南北黄 DX,AL BX,D1 DLY BX,D1 DLY
AL,10100101B ;南北红,东西绿 DX,AL BX,D2 DLY CX,03 AL,0FaH DX,AL
MOV BX,D1 CALL DLY OR AL,05H OUT DX,AL MOV BX,D1 CALL DLY LOOP XH2 OR AL,50H OUT DX,AL MOV BX,D1 CALL DLY MOV BX,D1 CALL DLY JMP BG DLY PROC NEAR PUSH CX
DDD: MOV CX,2ffH CCC: LOOP CCC DEC BX CMP BX,0 JNE DDD POP CX RET
DLY ENDP CODE ENDS END START
实验二 开关状态显示实验
一、实验要求
编写程序,设定8255的PA口为开关量输入,PB口为开关量输出,要求能随时将PA 口的开关状态通过PB口的发光二极管显示出来。 二、实验目的
学习使用8255各个口的不同工作方式 三、实验电路连接
将K1~K8用连接至8255的PB0~PB7,将DL1~DL8用连线连至8255的PC0~PC7, 8255CS连至译码处的200~207插孔。 四、实验说明
本实验要求8255工作方式0,PB口设置为输入,PC口设置为输出,输入量为开关量, 通过8255可实时显示在LED灯上。按下HALT或RST键则返回监控。
;实验二 开关状态显示实验 STACK SEGMENT STACK STA DW 50 DUP(?)
TOP EQU LENGTH STA STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK START: MOV DX,203H ;设置为b口输入,c口输出 MOV AL,92H OUT DX,AL BG: MOV DX,201H ;将b口状态从c口输出 IN AL,DX MOV DX,202h OUT DX,AL JMP BG CODE ENDS END START
实验五 A/D转换实验
一、实验要求
编程用查询方式采样电位器输入电压,并将采样到的结果实时地通过8279显示在 数码管上。(只须显示一位即可。用0~F表示0~+5V电压)。 二.实验目的
1.掌握A/D芯片AD0809的转换性能及编程方法。
2.学习A/D芯片与其他芯片(如8279)接口的方法,初步建立系统的概念。 三.实验电路及连线
CS79接译码处210~217这个插孔。A/D的CS插译码处208~20F这个插孔,0809的IN0 接至电位器W1的中心抽头插孔。
注意:电位器W1两边的两个插孔已经分别接好电源+5V和地,请不要再接,以防接 错,出现短路。 四、实验说明
本实验中所用A/D转换芯片为逐次逼近型,精度为8位每转换一次约100微钞,所以 程序若为查询式,则在启动后要加适应延时。另外,0809芯片提供转换完成信号(EOC), 利用此信号可实现中断采集。有兴趣者可自行编制程序。
Z8279 EQU 212H D8279 EQU 210H
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示 LEDFEQ EQU 38H ;扫描频率 CODE SEGMENT
ASSUME CS:CODE,DS:code START: push cs pop ds call delay MOV DX,Z8279 MOV AL,LEDMOD OUT DX,AL MOV AL,LEDFEQ OUT DX,AL MOV CX,06H
XZ: MOV DX,D8279 MOV AL,00H OUT DX,AL LOOP XZ MOV DX,D8279 MOV AL,5eH OUT DX,AL MOV DX,D8279 MOV AL,77H OUT DX,AL NOP
bg: mov dx,208h mov al,0 out dx,al call delay in al,dx mov cl,04h ror al,cl and al,0fh push ax
mov dx,z8279 mov al,81h out dx,al pop ax
;以上为写(AD ) LEA BX,LED XLAT MOV DX,D8279 ;将AL中内容写到数码管上 OUT DX,AL call delay jmp bg
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H DB 5EH,79H,71H delay proc near push cx mov cx,01f00h loop $ pop cx ret
delay endp CODE ENDS
END START
实验六 D/A转换实验
一、实验要求
编写程序,使D/A转换模块循环输出三角波和锯齿波。 二、实验目的
1.掌握DAC0832芯片的性能、使用方法及对应硬件电路。 2.了解D/A转换的基本原理。 三、实验电路连线
DAC0832的片选CS孔接译码处208-20F插孔(注:0832旁的短路帽应下插,做51实验时应上插)。 四、实验说明
D/A转换是量转化成模拟量的过程,本实验输出为模拟电压信号,本次实验生成的波形 较为简单,有兴趣者可试编程序生成各种波形,如方波,正弦波等,也可与键盘显示模块结 合起来,构成一个简单的波形发生器,通过键盘输入各种参数,如频率,振幅(小于+5V), 方波的占空比等。
CODE SEGMENT
ASSUME CS:CODE,DS:code,SS:code START:
push cs pop ds BG: NOP MOV DX,208H ;锯齿波 MOV AL,00H MOV CX,07ffH BB:
OUT DX,AL ADD AL,01 CMP AL,00H JNZ BB LOOP BB NOP MOV AL,00H MOV CX,07ffH EE:
OUT DX,AL ADD AL,01H CMP AL,0FFH JNE EE FF:
OUT DX,AL SUB AL,01H CMP AL,00H JNE FF LOOP EE JMP BG CODE ENDS END START
实验九 步进电机驱动实验
一、实验要求
利用8255的PC口PC-PC3轮流输出脉冲序列,小键盘控制步进电机的转速和转动方 向。
二、实验目的
1、 了解控制步进电机的基本原理。
2、 掌握控制步进电机转动的编程的方法。 三、实验连线
用硬导线将8255选信号CS接至200-207,PC0-PC3接至SMA-SMD。将 8279的片选信号CS接至208-20F。
在运行过程中,可按动小键盘的“0-9”数码键,控制步进电机的转速, 按“+或-”键控制步进电机的方向,按“REG”键退出。
C8279 EQU 20AH D8279 EQU 208H C8255 EQU 203H P8255C EQU 202H CODE SEGMENT
ASSUME CS:CODE,DS:CODE START:PUSH CS POP DS
INI:MOV DX,C8255 MOV AL,90H
OUT DX,AL ;8255初始化 MOV DX,C8279 MOV AL,00H OUT DX,AL MOV AL,2AH
OUT DX,AL ;8279初始化 MOV AL,0D1H
OUT DX,AL ;关显示 WAIT1:IN AL,DX MOV AH,AL
AND AL,80H
JNZ WAIT1 ;FIFO正在清除期间则跳转等待
MOV AL,AH AND AL,0FH CMP AL,00H
JE WAIT1 ;无键按下则跳转等待 LEA BX,STEP RUN:CALL CHKKEY CALL DISPLAY
MOV CX,08H ;步进电机控制 LOOP3:MOV DX,P8255C MOV AL,[SI] OUT DX,AL INC SI
CALL DELAY LOOP LOOP3 JMP RUN
CHKKEY PROC NEAR RDKEY:MOV DX,C8279 IN AL,DX MOV AH,AL AND AL,80H CMP AL,80H JE RDKEY MOV AL,AH AND AL,0FH CMP AL,00H JE RTN
MOV AL,40H
OUT DX,AL ;读FIFO/传感器RAM命令 MOV DX,D8279 IN AL,DX CHK:CMP AL,38H
JE QUIT ;RST 退出
CMP AL,30H ;键值大于30H,为方向控制键 JNC DIRE
MOV DELAYTIME,AL JMP RTN
DIRE:CMP AL,32H ;HERE 顺时针 JNE NEXT
MOV DIRDSP,40H LEA BX,STEP JMP RTN
NEXT:CMP AL,33H ;EXEC 逆时针
JNE RTN
MOV DIRDSP,46H
LEA BX,STEP
ADD BX,08H ;逆时针控制表地址 RTN:
MOV SI,BX RET CHKKEY ENDP
QUIT:MOV DX,C8279 MOV AL,0D2H OUT DX,AL jmp $
DELAY PROC NEAR PUSH CX
;判断键值,获得相应延时循环值 MOV AL,20H ;\"9\"? SUB AL,DELAYTIME JNZ L1
MOV CX,04H
L1: MOV AL,08H ;\"8\"? SUB AL,DELAYTIME JNZ L2
MOV CX,05H
L2: MOV AL,00H ;\"7\"? SUB AL,DELAYTIME JNZ L3
L3: MOV AL,21H ;\"6\"? SUB AL,DELAYTIME MOV CX,07H JNZ L4
MOV CX,08H
L4: MOV AL,09H ;\"5\"? SUB AL,DELAYTIME JNZ L5
MOV CX,09H
L5: MOV AL,01H ;\"4\"? SUB AL,DELAYTIME JNZ L6
MOV CX,0AH
L6: MOV AL,22H ;\"3\"? SUB AL,DELAYTIME JNZ L7
MOV CX,10H
L7: MOV AL,0AH ;\"2\"?
SUB AL,DELAYTIME JNZ L8
MOV CX,20H
L8: MOV AL,02H ;\"1\"? SUB AL,DELAYTIME JNZ L9
MOV CX,30H L9: MOV AL,03H
SUB AL,DELAYTIME ;\"0\"? JNZ LOOP1 MOV CX,40H LOOP1:PUSH CX
MOV CX,0155H LOOP2:NOP
LOOP LOOP2 POP CX
LOOP LOOP1 POP CX RET DELAY ENDP
DISPLAY PROC NEAR PUSH BX
MOV DX,D8279
MOV AL,DELAYTIME
LEA BX,LED ;查表显示速度值 XLAT
OUT DX,AL
MOV AL,DIRDSP
OUT DX,AL ;显示电机转动方向 MOV CX,0006H ;显示界面\"STEP\" LEA BX,DSP LOOP4:MOV AL,[BX] OUT DX,AL INC BX
LOOP LOOP4 MOV DX,C8279 MOV AL,0C2H OUT DX,AL POP BX RET DISPLAY ENDP
LED DB 07H,66H,06H,3FH DB 00H,00H,00H,00H
DB 7FH,6DH,5BH,71H DB 00H,00H,00H,00H
DB 00H,00H,00H,00H DB 00H,00H,00H,00H DB 00H,00H,00H,00H DB 00H,00H,00H,00H
DB 6FH,7DH,4FH,79H DB 00H,00H,00H,00H DB 77H,7CH,39H,5EH DB 00H,00H,00H,00H
DB 06H,5BH,4FH,66H DB 00H,00H,00H,00H DB 06H,5BH,4FH,66H DB 00H,00H,00H,00H
DSP DB 00H,00H,73H,79H,31H,6DH,00H DELAYTIME DB 01H DIRDSP DB 40H
STEP DB 01h,03H,02h,06H,04h,0cH,08h,09H DB 09H,08h,0cH,04h,06H,02h,03H,01h CODE ENDS END START
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务