微机原理实验报告—同济大学

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

CALL SHOW MOV DL,20H MOV AH,02H INT 21H INC SI LOOP A3 MOV INT AX,4C00H 21H
SHOW PROC NEAR MOV AL,DS:[SI] AND AL,0F0H SHR AL,4 CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,DS:[SI] AND AL,0FH CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H RET
源自文库
START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,09H INT 21H MOV DX,OFFSET MES1 MOV AH,09H INT 21H ;显示退出提示
;show message
C2:
C3:
MOV SI,OFFSET SD MOV AL,DS:[SI] AND AL,0F0H ;取高 4 位 SHRAL,4 CMP AL,0AH ;是否是 A 以上的数 JB C2 ADD AL,07H ADD AL,30H MOV DL,AL ;show character MOV AH,02H INT 21H MOV AL,DS:[SI] AND AL,0FH ;取低 4 位 CMP AL,0AH JB C3 ADD AL,07H ADD AL,30H MOV DL,AL ;show character MOV AH,02H INT 21H MOV AH,1 INT 16H ;判断是否有按键按下?
同济大学电子与信息工程学院 信息与通信工程系实验报告
实验一 1.
显示程序实验
实验目的 (1) 掌握在 PC 机上以十六进制形式显示数据的方法。 (2) 掌握部分 DOS 功能调用使用方法。 (3) 熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。 2. 实验设备 PC 微机一台。 3. 实验内容及说明 一般来说, 有很多程序需要显示输出提示运行的状况和结果,有的还需要将 数据区中的内容显示在屏幕上。 本实验要求将指定数据区的数据以十六进制数形 式显示在屏幕上,并通过 DOS 功能调用完成一些提示信息的显示。实验中可使 用 DOS 功能调用(INT 21H) 。 (1) 显示单个字符输出 入口:AH=02H 调用参数:DL=输出字符 (2) 显示字符串 入口:AH=09H 调用参数:DS:DX=串地址, ‘S’为结束字符 (3) 键盘输入并回显 入口:AH=01H 返回参数:AL=输出字符 (4) 返回 DOS 系统 入口:AH=4CH 调用参数:AL=返回码 4. 实验步骤 (1) 运行 Tddebug 软件, 选择 Edit 菜单, 根据实验内容的描述编写实验程序, 本实验显示部分参考实验流程如图 2-1-1 示。 (2) 使用 Compile 菜单中的 Compile 和 Link 对实验程序进行汇编、连接。 (3) 使用 Rmrun 菜单中的 Run,运行程序,观察运行结果。 (4) 使用 Rmrun 菜单中的 Debug,调试程序,观察调试过程中,数据传输指 令执行后,各寄存器及数据区的内容。 (5) 更改数据区中的数据,考察程序的正确性。
图 3 十进制 ASCII 转换为 BCD 码数参考流程 ;A2-2.asm ;将十进制数的 ASCII 码转换为 BCD 码 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA SEGMENT MES1 DB 'The BCD code of decimal are:$' BUF DB 31H,32H,33H,34H,35H DB 10H DUP(0) DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX MOV MOV MOV MOV CMP JNB SUB CX,0005H DI,OFFSET BUF BL,0FFH AL,[DI] AL,3AH A2 AL,30H
KEY:
JZ
KEY ;go back to dos
CODE
6. 实验结果: a 的十六进制数表示为 3D。 7. 实验小结 初步了解掌握部分 DOS 功能调用使用方法。 并且熟悉 Tddebug 调试 环境和 Turbo Debugger 的使用。
MOV AX,4C00H INT 21H ENDS END START
START: MOV AX,DDATA MOV DS,AX MOV SI,OFFSET BUF MOV BX,000AH MOV CX,0004H MOV AH,00H MOV AL,[SI] SUB AL,30H IMUL BX ADD AL,[SI+01] SUB AL,30H
A1:
( ADC JNC ADD A2:SUB
;取高 4 位 ;是否是 A 以上的数
;show character
;取低 4 位
;show character
(2) 将十进制数的 ASCII 码转换为 BCD 码 本实验要求将键盘输入的一个五位十进制数 54321 的 ASCⅡ码存放在数据 区中,转换为 BCD 码后 ,并将转换结果按位分别显示于屏幕上 。若输入的不 是十进制数的 ASCⅡ码,则输出“FF” 。提示:一字节 ASCⅡ码取其低四位即变 为 BCD 码。转换部分的实验流程参见图 3。
AL,[SI+01] A2 AH, 01H AL , 30H)
INC SI LOOP A1 MOV [SI],AX MOV DX,OFFSET MES1 MOV AH,09H INT 21H INC SI CALL SHOW DEC SI CALL SHOW MOV AX,4C00H INT 21H
图 1 计算机与外设间的数码转换关系 (1) 将 ASCII 码表示的十进制数转换为二进制数
n i 0
十进制数可以表示为: Di 10i Dn 10 n Dn 1 10 n 1 D 0 10 0 ,其中 Di 代表十进制数 1、2、3…9、0。 上式可转换为: Di 10i Dn 10 Dn 1 10 Dn 2 10 D1 10 D 0
实验目的 掌握循环程序的设计方法。 2. 实验设备 PC 微机一台。 3. 实验内容及说明 一个循环程序通常由以下几个部分组成: 1) 循环初始化部分:用于对相关内存单元及寄存器设置初始值, 如设置地址指针、循环次数、某些标志位等。只有正确地进行了初始化设置,循 环程序才能正确运行并及时停止。 2) 循环体:对要求重复执行的程序段部分,对应于要求重复执行 的操作。 3) 循环控制部分:为下一轮处理修正地址指针及循环次数等,并 判断循环结束的条件是否满足,若满足则退出循环。 4) 循环结束部分:用于保存循环运行的结果等。 (1) 编写程序完成对 10 个数的求和
;显示高字节 ;显示低字节
SHOW
PROC NEAR MOV AL,DS:[SI] AND AL,0F0H SHR AL,4 CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,DS:[SI] AND AL,0FH CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H RET ENDP CODE ENDS END START
5. 实验结果 (1)30H,30H,30H,31H,32H——000C 30H,30H,30H,31H,32H——00FF 30H,30H,30H,31H,32H——0100 (2)01 02 03 04 05 6. 实验小结 本次实验使我对编码转换的程序有了进一步的掌握。
实验三 1. 循环程序设计实验
实验二 1.
数码转换程序实验
实验目的 掌握不同进制数及编码相互转换的程序设计方法。 2. 实验设备 PC 微机一台。 3. 实验内容及说明 计算机输入设备输入的信息一般是由 ASCII 码或 BCD 码表示的数据或字 符,CPU 一般均用二进制数进行计算或其他信息处理,处理结果的输出又必须 依照外设的要求变为 ASCII 码、BCD 码或七段显示码等。因此,在应用软件中, 各类数制的转换和代码的转换是必不可少的。 计算机与外设间的数码转换关系如 图 2-3-1 所示,数码对应关系如表 2-3-1 所示。
;取高 4 位 ;是否是 A 以上的数
;show character
;取低 4 位
;show character
ENDP CODE ENDS END START 附:括号内的为更改后的程序。 4. 实验步骤 (1) 运行 Tddebug 软件, 选择 Edit 菜单, 根据实验内容描述的数码转换内 容分别编写实验程序。 (2) 利用 Compile 菜单中的 Compile 和 Link 对实验程序进行汇编、连接。 (3) 利用 Rmrun 菜单中的 Run,运行程序,观察运行结果。 (4) 使用 Rmrun 菜单中的 Debug,调试程序,观察调试过程中,数据传输 指令执行后,各寄存器及数据区的内容。 更改数据区中的数据,考察程序的正确性。
分析:需分配空间保存和数(SUM) ,在循环体中进行求和操作。
4. 实验程序: DATA SEGMENT BUFFER DW 1,2,3,4,5,6,7,8,9,10 SUM DATA STACK STACK CODE START:
LOOP1:
DW ? ENDS SEGMENT STACK ‘STACK’ DB 100 DUP ( ? ) ENDS SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AX, 0 ;AX 中为和数,初始为 0 MOV DI, OFFSET SUM ;存放结果地址送 DI MOV BX, OFFSET BUFFER ;数据缓冲区首地址 ;送 BX MOV CX, 10 ;循环次数送 CX ADD AX, [BX] ;累加 INC BX ;修改数据缓冲区地址 INC BX DEC CX ;次数减 1 JNZ LOOP1 ;到 10 次了吗?不到, ;转 LOOP1 MOV [DI], AX ;到 10 次,存放结果 CALL SHOW MOV AX, 4C00H ;返回 DOS INT 21H
图 1 显示程序实验流程图
5.
实验程序 ;显示程序实验 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATASEGMENT USE16 MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' MES1 DB 'Show a as hex:',0AH,0DH,'$' SD DB 'a' DATAENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA
A1:
;比较 AL 中的数是否是 0~9 的 ;ASCII 码
A2:
JB MOV MOV MOV INC LOOP MOV MOV MOV MOV INT
A2 BL,AL AL,BL [DI+05H],AL DI A1 SI,DI CX,05H DX,OFFSET MES1 AH,09H 21H
A3:
表 1 数码转换对应关系
图 2 十进制 ASCII 转换为二进制数参考流程 ;A2-1.asm ;将 ASCII 码十进制数转换为二进制数
STACK1
SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA MES1 BUF SEGMENT DB 'The ascii code of decimal code are:$' DB 30H,30H,30H,31H,32H DB 10H DUP(0) DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA
i 0 n


由上式可归纳十进制数转换为二进制的方法: 从十进制数的最高位 Dn 开始 作乘 10 加次位的操作,依次迭代类推,则可求出二进制数结果。 本实验要求将缓冲区中的一个五位十进制数 00012 的 ASCII 码转换成二进 制数,并将转换结果按位显示在屏幕上。转换过程的参考流程如图 2 所示。
相关文档
最新文档