微机原理实验程序

  • 格式:docx
  • 大小:349.85 KB
  • 文档页数:15

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一两个多位十进制数相减实验

一、实验要求:将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序

存放在以DATAI和DATA2为首的5个内存单元中(低位在前>,结果送回

DATAI处。

二、实验目的:1.学习数据传送和算术运算指令的用法。

2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

三、实验步骤:连好实验箱后接通电源,打开上位机软件88TE进入软件调试界面:

点击“文件\打开”文件路径为C:

\88TE\cai\asm\Ruanjian\Rjexp1.asm。具体操作如图所示:

b5E2RGbCAP

点击编译连接生成可执行的exe文件。

通过单步运行调试程序,打开寄存器查看其变量变化情况。

四、实验程序框图:

五、实验程序:

文件路径为C:\88TE\cai\asm\Ruanjian\Rjexp1.asm

DATA SEGMENT

DATA1 DB 33H,39H,31H,37H,38H 。第一个数据<作为被减数)DATA2 DB 36H,35H,30H,38H,32H 。第二个数据<作为减数)MES1 DB '-','$'

MES2 DB '=','$'p1EanqFDPw Array 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 SP,AX

MOV SI,OFFSET DATA1

MOV BX,05

CALL DISPL

MOV AH,09H

LEA DX,MES1

INT 21H

MOV SI,OFFSET DATA2

MOV BX,05

CALL DISPL

MOV AH,09H

LEA DX,MES2

INT 21H

MOV SI,OFFSET DATA1

MOV DI,OFFSET DATA2

CALL SUBA 。减法运算

MOV SI,OFFSET DATA1

MOV BX,05 。显示结果

CALL DISPL

MOV DL,0DH

MOV AH,02H

INT 21H

MOV DL,0AH

MOV AH,02H

INT 21H

INT 21H

MOV AX,4C00H

INT 21H

DISPL PROC NEAR 。显示子功能

DSI: MOV AH,02

MOV DL,[SI+BX-1] 。显示字符串中一字符

INT 21H

DEC BX 。修改偏移量

JNZ DSI

RET

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 码表示的数字串DXDiTa9E3d

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 DL,[SI+BX-1]

INT 21H

DEC BX

JNZ L1

MOV AH,09H

LEA DX,MES1

INT 21H

LEA SI,DATA2

MOV AH,02H

MOV DL,[SI]

INT 21H

MOV AH,09H

LEA DX,MES2

INT 21H

MOV SI,OFFSET DATA2 。显示算式

MOV BL,[SI] 。乘数DATA2→BL

AND BL,00001111B 。屏蔽高4位,ASCII码转化为十六进制数

MOV SI,OFFSET DATA1

MOV DI,OFFSET RESULT

MOV CX,05

LOOP1: MOV AL,[SI]

AND AL,00001111B 。取被乘数DATA1,ASCII变十六进制数

INC SI 。指向被乘数1的下一字符单元

相关主题