《微机原理》课程上机内容与要求 要求 ●掌握编辑程序(Edit)、汇编程序(MASM)、连接器( Linker)以及调试程序( Debug) 的基本使用 完成给定汇编语言程序的上机和调试过程 内容(共四道题,前三题必须完成,第四题选作) ●题(一):实例程序的调试 实例程序:将二进制字以十六进制方式显示 NAME PROGI STACK SEGMENT STACK STA DB 50 DUP(?) TOP EQU LENGTH STA STACK ENDS DATA SEGMENT NUM DW001110100000B;二进制字 NOTEs DB "The result is:'S DATA ENDS CODE SEGMENT ASSUME CS CODE. DS: DATA. ES: DATA. SS: STACK START: MOV AX. DATA MOV DS.AX MOV AXSTACK MOV SS.AX MOV SPTOP ;堆栈指针赋值 MOV DX OFFSET NOTES MOV AH. 09H INT 21H ;显示提示语 MOV BX NUM MOV CH4 十六进制位数 ROTATE MOV CL. 4 ROL BX. CL 4位二进制变为1位十六进制 MOV AL BL AND AL OFH ADD AL CMP AL JLE DISPLAY ADD AL O7H ;十六进制数为 ABCDEF
《微机原理》课程上机内容与要求 一、要求 z 掌握编辑程序(Edit)、汇编程序(MASM)、连接器(Linker)以及调试程序(Debug) 的基本使用 z 完成给定汇编语言程序的上机和调试过程 二、内容(共四道题,前三题必须完成,第四题选作) z 题(一):实例程序的调试 实例程序:将二进制字以十六进制方式显示 NAME PROG1 STACK SEGMENT STACK STA DB 50 DUP (?) TOP EQU LENGTH STA STACK ENDS ; DATA SEGMENT NUM DW 0011101000000111B ;二进制字 NOTES DB ‘The result is :’,’$’ DATA ENDS ; CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS, AX MOV SP,TOP ;堆栈指针赋值 MOV DX,OFFSET NOTES MOV AH,09H INT 21H ;显示提示语 MOV BX,NUM MOV CH,4 ;十六进制位数 ROTATE : MOV CL, 4 ROL BX,CL ;4 位二进制变为 1 位十六进制 MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,’9’ JLE DISPLAY ADD AL,07H ;十六进制数为 ABCDEF
DISPLAY MOV DL. AL MOV AH, 2 INT 21H 十六进制数显示 DEC CH INZ ROTATE MOV AX.4C00H INT 21H CODE ENDS END START ●题(二):在数据段中从偏移地址BUF开始连续存放着100个字符,编写一段程序 将该字符串中所有的字母′A′都改成字母B′。 ●题(三):用DOS功能调用实现IO 试验目的:掌握在PC机上利用DOS功能调用实现简单输入输出的基本方法 试验内容:利用DOS功能调用从键盘输入一个字符,将其ASC码加1后在 屏幕上显示;按ESC键后返回DOS 参考流程图如下所示 开始 DOS功能调用(09H),显示提示信息 DOS功能调用(01HD,从键盘接收一个字符 Y<是ESC字符 将键入字符 的ASCI码加1 返回DOS pOS功能调用(O2H) 在屏幕上进行输出 ●题(四):接收年、月、日信息并进行显示。本题为选作题,并提供程序的清单, 但是留有一些空格,并且程序还存在Bug,需要同学们自己对该程序进行调试实现, 也可以自己实现 试验目的:掌握响铃符方法;掌握年、月、日的输入方法 试验内容:先显示提示信息“ WHAT IS THE DATE(MM/DD/YY)?” 并响铃一次,然后接收键盘输入的月/日/年信息,并显示
DISPLAY: MOV DL, AL MOV AH,2 INT 21H ;十六进制数显示 DEC CH JNZ ROTATE MOV AX,4C00H INT 21H CODE ENDS ; END START z 题(二):在数据段中从偏移地址 BUF 开始连续存放着 100 个字符,编写一段程序, 将该字符串中所有的字母′A′都改成字母′B′。 z 题(三):用 DOS 功能调用实现 I/O 试验目的:掌握在 PC 机上利用 DOS 功能调用实现简单输入输出的基本方法 试验内容:利用 DOS 功能调用从键盘输入一个字符,将其 ASCII 码加 1 后在 屏幕上显示;按 ESC 键后返回 DOS 参考流程图如下所示: Y N 开始 DOS功能调用(09H),显示提示信息 DOS功能调用(01H),从键盘接收一个字符 是ESC字符? 将键入字符 的ASCII码加1 DOS功能调用(02H), 在屏幕上进行输出 返回DOS z 题(四):接收年、月、日信息并进行显示。本题为选作题,并提供程序的清单, 但是留有一些空格,并且程序还存在 Bug,需要同学们自己对该程序进行调试实现, 也可以自己实现。 试验目的:掌握响铃符方法;掌握年、月、日的输入方法 试验内容:先显示提示信息“WHAT IS THE DATE(MM / DD / YY)?” 并响铃一次,然后接收键盘输入的月 / 日 / 年信息,并显示
参考流程图如下所示 [段寄存器和堆栈初始化 显示 WHAT IS THE DA 输出响铃字符 [调用GeNm,接收键入的月、日、年值 调用DisP显示年值 [输出字符一 [调用Disp显示月值 [输出字符 [调用 Disp.显示日值 返回DOS ■程序清单: CRLF MACRO MOV AH.02H MOV DL ODH INT 21H MOV AH. 02H MOV INT 21H ENDM DATA SEGMENT MESS DB WHAT IS THE DATE( MM /DD/YY)?,ODH,OAH, S ERROR DB ' INPUT ERROR ! ODHOAH S DATA ENDS STACK SEGMENT STA DW 32 DUP(?) TOP DW STACK ENDS CODE SEGMENT ASSUME CS CODE DS: DATA.ES DATA. SS: STACK START: MOV AX DATA MOV DS.AX MOV ES, AX MOV SPTOP;初始化 MOV AH.09H
参考流程图如下所示: 入口 段寄存器和堆栈初始化 显示“WHAT IS THE DATE?” 输出响铃字符 调用GetNum,接收键入的月、日、年值 输出字符‘-’ 调用Dispp显示日值 返回DOS 调用Dispp显示月值 调用Disp显示年值 输出字符‘-’ 程序清单: CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0Ah INT 21H ENDM DATA SEGMENT MESS DB 'WHAT IS THE DATE( MM / DD /YY)?',0DH,0AH,'$' ERROR DB 'INPUT ERROR !'0DH,0AH,'$' DATA ENDS STACK SEGMENT STA DW 32 DUP (?) TOP DW ? STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP ;初始化 MOV AH,09H
MOV DX OFFSET MESS INT21H;显示提示信息 MOV DL. 07H INT2lH响铃一次 CALL GETNUM PUSH DX CALL GETNUM PUSH DX CALL GETUNM;接收键入的月、日及年值 MOV AX. DX CALL DISP显示年值 MOV AH. O2H MOV DL.-A INT2lH;显示 POP DX POPAX CALL DISPP;显示月值 MOV AH.O2H MOV DL INT2lH,显示 MOV AX. DX CALL DISPP;显示日值 MOV AX 4C00H INT2lH;返回DOS DISPP PROC NEAR MOV BL AL MOV DL. BI MOV CL. 04 DL DL. CL AND DL,OFH CALL DISPL MOV DL. BL AND DL OFH CALL DISPL RET DISPP ENDP DISPL PROC NEAR ADD DL, 30H CMP DL 3AH JB DDD ADD DL. 27H DDD: MOV AH. 02H INT 21H
MOV DX,OFFSET MESS INT 21H ;显示提示信息 MOV AH,02H MOV DL,07H INT 21H ;响铃一次 CALL GETNUM PUSH DX CALL GETNUM PUSH DX CALL GETUNM ;接收键入的月、日及年值 MOV AX,DX CALL DISP ;显示年值 MOV AH,02H MOV DL,'-' INT 21H ;显示'-' POP DX POP AX CALL DISPP ;显示月值 MOV AH,02H MOV DL,'-' INT 21H ;显示'-' MOV AX,DX CALL DISPP ;显示日值 MOV AX,4C00H INT 21H ;返回 DOS DISPP PROC NEAR MOV BL,AL MOV DL,Bl MOV CL,04 ROL DL,CL AND DL,0FH CALL DISPL MOV DL,BL AND DL,0FH CALL DISPL RET DISPP ENDP DISPL PROC NEAR ADD DL,30H CMP DL,3AH JB DDD ADD DL,27H DDD: MOV AH,02H INT 21H
RET DISPL ENDP DISP PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX MOV AL.AH CALL DISPP POPAX CALL DISPP POP DX POP CX POP BX RET DISP ENDP GETNUM PROC NEAR PUSH CX XOR DX. DX GGG: MOV AHOIH INT 21H CMP AL ODH JZ PPP CMP AL. 20H IZ PPP SUBAL 30H JB KKK CMP OAH JB GETS B KKK CMP AL OFH B KKK CMP AL, 2FH A KKK SUBAL 20H GETS: MOV CL. 04 SHL DX CL AHAH ADD DX, AX JMPGGG KKK: MOV AH.09H
RET DISPL ENDP DISP PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX MOV AL,AH CALL DISPP POP AX CALL DISPP POP DX POP CX POP BX RET DISP ENDP GETNUM PROC NEAR PUSH CX XOR DX,DX GGG: MOV AH,01H INT 21H CMP AL,0DH JZ PPP CMP AL,20H JZ PPP SUB AL,30H JB KKK CMP 0AH JB GETS CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS JB KKK CMP AL,2FH JA KKK SUB AL,20H GETS: MOV CL,04 SHL DX,CL XOR AH,AH ADD DX,AX JMP GGG KKK: MOV AH,09H
MOV DX OFFSET ERROR INT 21H PPP. PUSH DX CRLF POP DX POP CX RET GETNUM ENDP CODE ENDS END START
MOV DX,OFFSET ERROR INT 21H PPP: PUSH DX CRLF POP DX POP CX RET GETNUM ENDP CODE ENDS END START