资源描述
专业:信息对抗技术
班级:1302031
姓名:韩冰
学号:13020310042
指导教师:张娟
微机原理上机报告
目 录
一、第一次上机 2
1.实验目的 2
2.实验仪器 2
3.实验内容 2
4.实验结果 5
5.问题讨论 7
二、第二次上机 8
1.实验目的 8
2.实验仪器 8
3.实验内容 8
4.实验结果 10
5.问题讨论 11
三、第三、四次上机 11
1.实验目的 11
2.实验仪器 11
3.实验内容 11
4.实验结果 25
27
第一次上机
一、实验目的
1. 熟练掌握8086/8088的各种寻址方式及应用。
2.掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础。
二、实验仪器
586微机 1台
三、实验内容
1.关于数据的寻址方式练习
8086/8088 提供多种方式实现操作数寻址,大体可分为7种:
a. 立即寻址
b. 寄存器寻址
c. 直接寻址
d. 寄存器间接寻址
e. 寄存器相对寻址
f. 基址变址寻址
g. 基址变址且相对寻址
掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。
2.实验步骤
①在全屏幕编辑软件下,建立以下汇编语言源程序。
源代码:
STACK SEGMENT STACK
DB 0B0H, 0B1H, 0B2H, 0B3H,
0B4H, 0B5H, 0B6H, 0B7H,
DB 0B8H, 0B9H
DB 0BAH, 0BBH, 0BCH, 0BDH,
0BEH,0BFH
DB 10H DUP(00)
STACK ENDS
DATA1 SEGMENT
DB 0A0H, 0A1H, 0A2H, 0A3H
TABLE DW 0A5A4H
DB 0A6H, 0A7H, 0A8H, 0A9H,
0AAH, 0ABH
DB 0ACH, 0ADH, 0AEH, 0AFH
DATA1 ENDS
DATA2 SEGMENT
DB 0C0H, 0C1H, 0C2H, 0C3H,
0C4H, 0C5H, 0C6H, 0C7H
DB 0C8H ,0C9H, 0CAH, 0CBH,
0CCH, 0CDH, 0CEH, 0CFH
DATA2 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA1,
ES:DATA2, SS:STACK
START: MOV AX, DATA1
MOV DS, AX
MOV AX, DATA2
MOV ES, AX
MOV BX, 0004H
MOV CX, 0005H
MOV BP, 0003H
MOV SI, 0002H
MOV DI, 0001H
MOV AX, CX
MOV AX, 500H
MOV AX, TABLE
MOV AX, ES:[BX]
MOV AX, [BX+05H]
MOV AX, SS:[BX]+03H
MOV AX, TABLE [BX]
MOV AX, 07H [BX]
MOV AX, [BP]
MOV AX, TABLE [BP]
MOV AX, 08H [BP]
MOV AX, [BP+06H]
MOV AX, DS:[BP+03H]
MOV AX, [BP]+05H
MOV AX, ES: [SI+03H]
MOV AX, [DI+06H]
MOV AX, [DI]+05H
MOV AX, TABLE [SI]
MOV AX, [SI]
MOV AX, TABLE [DI]
MOV AX, [SI]+05H
MOV AX, [BX] [DI+01H]
MOV AX, [BX] [SI]+03H
MOV AX, TABLE [BX] [SI]
MOV AX, ES:[BX] [DI]
MOV AX, [BP] [DI+02H]
MOV AX, TABLE [BP] [DI]
MOV AX, ES:[BP] [SI]
MOV AX, [BP] [SI+05H]
MOV AX, 03H [BP] [DI]
MOV AX, [BP] [SI]
MOV AX, [BP+02H] [DI+03H]
MOV AX, TABLE [BP+02H] [DI+03H]
MOV AH, 4CH
INT 21H
CODE ENDS
END START
②用MASM.EXE宏汇编程序对以上源程序进行汇编
③用LINK.EXE连接程序对文件名.OBJ文件进行连接
④对源程序中从MOV AX, CX开始以下所有指令按下表进行计算。
四、实验结果
指令
SRC寻址方式
SRC的地址
AX推算值
AX实际值
MOV AX, CX
寄存器寻址
0005H
0005H
MOV AX, 500H
立即寻址
0500H
0500H
MOV AX, TABLE
直接寻址
DS:0004H
A5A4H
A5A4H
MOV AX, ES:[BX]
寄存器间接寻址
ES:0004H
C5C4H
C5C4H
MOV AX, [BX+05H]
寄存器相对寻址
DS:0009H
AAA9H
AAA9H
MOV AX, SS:[BX]+03H
寄存器相对寻址
SS:0007H
B8B7H
B8B7H
MOV AX, TABLE [BX]
寄存器相对寻址
DS:0008H
A9A8H
A9A8H
MOV AX, 07H [BX]
寄存器相对寻址
DS:000BH
ACABH
ACABH
MOV AX, [BP]
寄存器间接寻址
SS:0003H
B4B3H
B4B3H
MOV AX, TABLE [BP]
寄存器相对寻址
DS:0007H
A8A7H
A8A7H
MOV AX, 08H [BP]
寄存器相对寻址
SS:000BH
BCBBH
BCBBH
MOV AX, [BP+06H]
寄存器相对寻址
SS:0009H
BAB9H
BAB9H
MOV AX, DS:[BP+03H]
寄存器相对寻址
DS:0006H
A7A6H
A7A6H
MOV AX, [BP]+05H
寄存器相对寻址
ES:0008H
B9B8H
B9B8H
MOV AX, ES: [SI+03H]
寄存器相对寻址
ES:0005H
C6C5H
C6C5H
MOV AX, [DI+06H]
寄存器相对寻址
DS:0007H
A8A7H
A8A7H
MOV AX, [DI]+05H
寄存器相对寻址
DS:0006H
A7A6H
A7A6H
MOV AX, TABLE [SI]
寄存器相对寻址
DS:0006H
A7A6H
A7A6H
MOV AX, [SI]
寄存器间接寻址
DS:0002H
A3A2H
A3A2H
MOV AX, TABLE [DI]
寄存器相对寻址
DS:0005H
A6A5H
A6A5H
MOV AX, [SI]+05H
寄存器相对寻址
DS:0007H
A8A7H
A8A7H
MOV AX, [BX] [DI+01H]
基址变址且相对寻址
DS:0006H
A7A6H
A7A6H
MOV AX, [BX] [SI]+03H
基址变址且相对寻址
DS:0009H
AAA9H
AAA9H
MOV AX, TABLE [BX] [SI]
基址变址且相对寻址
DS:000AH
ABAAH
ABAAH
MOV AX, ES:[BX] [DI]
基址变址寻址
DS:0005H
C6C5H
C6C5H
MOV AX, [BP] [DI+02H]
基址变址且相对寻址
DS:0006H
B7B6H
B7B6H
MOV AX, TABLE [BP] [DI]
基址变址且相对寻址
DS:0008H
A9A8H
A9A8H
MOV AX, ES:[BP] [SI]
基址变址寻址
DS:0005H
C6C5H
C6C5H
MOV AX, [BP] [SI+05H]
基址变址且相对寻址
DS:000AH
BBBAH
BBBAH
MOV AX, 03H [BP] [DI]
基址变址且相对寻址
DS:0007H
B8B7H
B8B7H
MOV AX, [BP] [SI]
基址变址寻址
DS:0005H
B6B5H
B6B5H
MOV AX, [BP+02H] [DI+03H]
基址变址且相对寻址
DS:0009H
BAB9H
BAB9H
MOV AX, TABLE [BP+02H] [DI+03H]
基址变址且相对寻址
DS:000DH
AEADH
AEADH
五、问题讨论
1.在上表中,分析AX推算值与实际值有何不同?找出错误原因,小结出各种寻址方式所用
的段寄存器的规律来。
答:推算值与实际值相同。
第二次上机
一、实验目的
1.熟练掌握汇编语言程序设计的方法及上机步骤。
2.掌握算术运算中,十进制数调整指令的应用。
3.掌握子程序的设计方法。
4.掌握DOS功能的调用方法。
二、实验仪器
586微机 1台
三、实验内容
1.编程要求与提示:
编写求十进制数02121424与21736543之和的程序,并将和以十进制数的形式送屏幕显示。
①两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
②和以压缩十进制数的形式存入SUM以下单元。
③将和送到屏幕显示部分功能的实现采用子程序的形式。
2.实验步骤
①用全屏幕编辑软件建立源程序。
②用masm.exe汇编程序对源程序进行汇编,形成目标程序。
③用link.exe连接程序对目标程序进行连接形成可执行文件。
④用DEBUG对连接通过的可执行程序进行调试
3.源代码
STACK SEGMENT STACK
DB 10H DUP(00)
STACK ENDS
DATA SEGMENT
ADD1 DB 12H,67H,85H,32H
ADD2 DB 21H,73H,65H,43H
SUM DB 4H DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,DATA
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SI,ADD1[3]
LEA BX,ADD2[3]
LEA DI,SUM[3]
MOV CX,4
CLC
L1:
MOV AL,[SI]
ADC AL,[BX]
DAA
MOV [DI],AL
DEC SI
DEC BX
DEC DI
LOOP L1
CALL DISPAL
EXITPROC:
MOV AH,4CH
MOV AH,1
INT 21H
DISPAL PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
LEA DI,SUM
MOV CX,4
DISPAL2:
MOV AL,[DI]
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
MOV AH,2
MOV DL,AL
ADD DL,30H
INT 21H
MOV AL,[DI]
AND AL,0FH
MOV AH,2
MOV DL,AL
ADD DL,30H
INT 21H
INC DI
LOOP DISPAL2
POP DI
POP DX
POP CX
POP BX
POP AX
RET
DISPAL ENDP
CODE ENDS
END START
四、实验结果
五、问题讨论
1.在以十进制数形式参加运算的程序设计中,应注意那些问题。
答:应注意进位和溢出。
2.总结循环程序设计的步骤及方法。
答:分析题目,画流程图,标出循环条件,写程序,检测循环能否进行。
第三、四次上机
一、实验目的
1.增强和提高汇编语言程序设计的能力,掌握模块化程序设计的方法。
2.熟练掌握DOS常用功能的调用方法。
二、实验仪器
586微机 一台
三、实验内容
1.编写如下程序,并在机器上调试成功。程序采用菜单式选择,可以接收用户从键盘输入的五个命令(1-5),各命令功能分别为:
①按下“1”键,完成字符串小写字母变成大写字母;
用户输入一由英文大小写字母或数字0-9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其他字符不变,并在屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。
②按下“2”键,完成找最大值(选择a);
a.接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
③按下“3”键,完成排序(选择a);
a.接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。
④按下“4”键,显示时间;
首先提示用户对时,即用户输入时、分、秒(以空格或逗号为分隔符,以回车结束),然后,在屏幕上不断显示时间,格式为:
XX(时): XX(分): XX(秒)
最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。
⑤按下“5”键,结束程序运行,返回系统提示符。
2.源代码
STACK SEGMENT STACK 'STACK'
DB 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
TABLE DW G1, G2, G3, G4, G5
STRING0 DB ' My school ID is 13020310042.My name is Li HanBing.',0DH,0AH,'$'
STRING1 DB '1. Change small letters into capital letters of string;', 0DH, 0AH, '$'
STRING2 DB '2. Find the maximum of string;', 0DH, 0AH, '$'
STRING3 DB '3. Sort for datas;', 0DH, 0AH, '$'
STRING4 DB '4. Show Time;', 0DH, 0AH, '$'
STRING5 DB '5. Exit.', 0DH, 0AH, '$'
STRINGN DB 'Input the number you select (1-5) : $'
IN_STR DB 'Input the string (including letters & numbers, less than 60 letters) :', 0DH, 0AH, '$'
PRESTR DB 'Original string : $'
NEWSTR DB 'New string : $'
OUT_STR DB 'The string is $'
MAXCHR DB 'The maximum is $'
IN_NUM DB 'Input the numbers (0 - 255, no more than 20 numbers) : ', 0DH, 0AH, '$'
OUT_NUM DB 'Sorted numbers : ', 0DH, 0AH, '$'
IN_TIM DB 'Correct the time (HH:MM:SS) : $'
HINTSTR DB 'Press ESC, go back to the menu; or press any key to play again!$'
KEYBUF DB 61
DB ?
DB 61 DUP (?)
NUMBUF DB ?
DB 20 DUP (?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
MOV SP, OFFSET TOP
MAIN:
CALL FAR PTR MENU
AGAIN:
MOV AH, 2
MOV BH, 0
MOV DL, 41
MOV DH, 10
INT 10H
MOV AH, 1
INT 21H
CMP AL, '1'
JB AGAIN
CMP AL, '5'
JA AGAIN
SUB AL, '1'
SHL AL, 1
CBW
LEA BX, TABLE
ADD BX, AX
JMP WORD PTR [BX]
G1:
CALL FAR PTR CHGLTR
MOV AH, 8
INT 21H
CMP AL, 1BH
JZ MAIN
JMP G1
G2:
CALL FAR PTR MAXLTR
MOV AH, 8
INT 21H
CMP AL, 1BH
JZ MAIN
JMP G2
G3:
CALL FAR PTR SORTNUM
MOV AH, 8
INT 21H
CMP AL, 1BH
JZ MAIN
JMP G3
G4:
CALL FAR PTR TIMCHK
MOV AH, 8
INT 21H
CMP AL, 1BH
JZ MAIN
JMP G4
G5:
MOV AH, 4CH
INT 21H
MENU PROC FAR
MOV AH, 0
MOV AL, 3
MOV BL, 0
INT 10H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 5
INT 10H
MOV AH, 9
LEA DX, STRING0
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 6
INT 10H
MOV AH, 9
LEA DX, STRING1
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 7
INT 10H
MOV AH, 9
LEA DX, STRING2
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 8
INT 10H
MOV AH, 9
LEA DX, STRING3
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 9
INT 10H
MOV AH, 9
LEA DX, STRING4
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 10
INT 10H
MOV AH, 9
LEA DX, STRING5
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 11
INT 10H
MOV AH, 9
LEA DX, STRINGN
INT 21H
RET
MENU ENDP
CHGLTR PROC FAR
RECHG:
MOV AH, 0
MOV AL, 3
MOV BL, 0
INT 10H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 5
INT 10H
MOV AH, 9
LEA DX, IN_STR
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 6
INT 10H
MOV AH, 0AH
LEA DX, KEYBUF
INT 21H
CMP KEYBUF + 1, 0
JZ RECHG
LEA BX, KEYBUF + 2
MOV AL, KEYBUF + 1
CBW
MOV CX, AX
ADD BX, AX
MOV BYTE PTR [BX], '$'
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 7
INT 10H
MOV AH, 9
LEA DX, PRESTR
INT 21H
MOV AH, 9
LEA DX, KEYBUF + 2
INT 21H
LEA BX, KEYBUF + 2
LCHG:
CMP BYTE PTR [BX], 61H
JB NOCHG
AND BYTE PTR [BX], 0DFH
NOCHG:
INC BX
LOOP LCHG
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 8
INT 10H
MOV AH, 9
LEA DX, NEWSTR
INT 21H
MOV AH, 9
LEA DX, KEYBUF + 2
INT 21H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 9
INT 10H
MOV AH, 9
LEA DX, HINTSTR
INT 21H
RET
CHGLTR ENDP
MAXLTR PROC FAR
REMAX:
MOV AH, 0
MOV AL, 3
MOV BL, 0
INT 10H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 5
INT 10H
MOV AH, 9
LEA DX, IN_STR
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 6
INT 10H
MOV AH, 0AH
LEA DX, KEYBUF
INT 21H
CMP KEYBUF+1, 0
JZ REMAX
LEA BX, KEYBUF+2
MOV AL, KEYBUF+1
CBW
MOV CX, AX
ADD BX, AX
MOV BYTE PTR [BX], '$'
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 7
INT 10H
MOV AH, 9
LEA DX, OUT_STR
INT 21H
MOV AH, 9
LEA DX, KEYBUF+2
INT 21H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 8
INT 10H
MOV AH, 9
LEA DX, MAXCHR
INT 21H
MOV DL, 0
LEA BX, KEYBUF+2
LCMP:
CMP [BX], DL
JB NOLCHG
MOV DL, [BX]
NOLCHG:
INC BX
LOOP LCMP
MOV AH, 2
INT 21H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 9
INT 10H
MOV AH, 9
LEA DX, HINTSTR
INT 21H
RET
MAXLTR ENDP
SORTNUM PROC FAR
RESORT:
MOV AH, 0
MOV AL, 3
MOV BL, 0
INT 10H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 5
INT 10H
MOV AH, 9
LEA DX, IN_NUM
INT 21H
MOV AH, 2
MOV DL, 5
MOV DH, 6
INT 10H
MOV AH, 0AH
LEA DX, KEYBUF
INT 21H
CALL CIN_INT
CMP AL, 0
JZ RESORT
CMP NUMBUF, 0
JZ RESORT
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 7
INT 10H
MOV AH, 9
LEA DX, OUT_NUM
INT 21H
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 8
INT 10H
CALL FAR PTR MPSORT
CALL FAR PTR INT_OUT
MOV AH, 2
MOV BH, 0
MOV DL, 5
MOV DH, 9
INT 10H
MOV AH, 9
LEA DX, HINTSTR
INT 21H
RET
SORTNUM ENDP
CIN_INT PROC NEAR
MOV CL, KEYBUF + 1
LEA SI, KEYBUF + 2
MOV CH, 0
MOV DH, 10
MOV AL, 0
MOV DL, 0
FNDNUM:
CMP BYTE PTR [SI], ' '
JZ ADDNUM
MOV DL, 1
MUL DH
XOR BH, BH
MOV BL, [SI]
ADD AX, BX
SUB AX, '0'
CMP AH, 0
JA ERRNUM
JMP NEXT
ADDNUM:
CMP DL, 1
JNZ NEXT
INC CH
CALL ADDNEW
MOV DL, 0
MOV AL, 0
NEXT:
INC SI
DEC CL
CMP CL, 0
JNZ FNDNUM
CMP DL, 1
JNZ
展开阅读全文