一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com
仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。
免责声明,本人菜只因一只,内容仅供参考,错了不负责哈。
实验一汇编程序上机环境的熟悉
一、实验目的
- 学会使用汇编程序集成开发环境来编辑源文件(*.ASM)、调用MASM宏汇编程序对源文件进行汇编,获得目标程序(*.OBJ)、调用LINK连接程序将汇编后的目标文件(*.OBJ)连接成可执行的文件(*. EXE)。
- 学会使用DEBUG调试程序把可执行文件装入内存并调试运行,熟悉DEBUG命令。
二、实验内容
- 完成编辑源文件、汇编、连接、运行并调试。
- 实验过程
- 调试程序
三、上机记录及思考题
(1)实验一:查0~9平方表
1:源代码:
;sample 顺序结构查0~9平方表
DATA SEGMENT
INPUT DB 'PLEASE INPUT X(0~9):$'
TABLE DB 0,1,4,9,16,25,36,49,64,81
XX DB ?
YY DB ?
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,9
LEA DX,INPUT
INT 21H
MOV AH,1
INT 21H
AND AL,0FH
MOV XX,AL
MOV BX,OFFSET TABLE
MOV AH,0
MOV AL,XX
ADD BX,AX
MOV AL,[BX]
MOV YY,AL
RET
START ENDP
CODE ENDS
END START
2:实验结果截图:
(2)实验二:
2.1调试看内存
1:源代码:
DATA SEGMENT
BUFF DB 79H,98H,23H,67H,0A8H
MAX DB ?
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV CX,5
LEA SI,BUFF
MOV AL,[SI]
DEC CX
INC SI
LP: CMP AL,[SI]
JGE G1
MOV AL,[SI]
G1: INC SI
LOOP LP
MOV MAX,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
2:实验结果截图:
2.2调试看内存。单步运行,分析每条指令的运行结果
1:源代码
DATA SEGMENT
A DB ‘$’,10H
B DB ‘COMPUTER’
COUNT EQU $-B
CC DW 1234H,0FFH
D DB 5 DUP(?)
E DD 1200459AH
ORG 0200H
DB 10H,2AH,3CH,46H,59H,6BH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,A
MOV AH,COUNT
MOV DX,CC
MOV DX,CC+1
MOV DX,CC+2
MOV BX,OFFSET B
MOV CH,3[BX]
MOV CX,3[BX]
LEA BX,D
MOV D,’Y’
MOV D+1,’O’
MOV D+2,’U’
LES DI,E
MOV SI,0200H
MOV AH,2[BX]
MOV AX,2[BX]
MOV AH,4CH
INT 21H
CODE ENDS
END START
2:思考题:
- 单步运行时,哪条指令运行后才可以看数运行结果运行结果运行结果运行结果运行结果运行结果运行结果据段?请对比数据段的定义和数据段的实际分配情况,其中,COUNT分配存储单元了吗?请自己画数据段分配示意图,以柱状图的形式标注存储单元的逻辑地址和存储内容。
①MOV DS,AX 之后
②count不分配存储单元.
③图示:
2.哪几条指令运行后修改了数据段?请将修改前和修改后数据段分配情况分别拷屏。
(3)实验三:
有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入另一个内存区。
1) 不考虑进位。
①已知数据段的定义:
data segment
org 2000h
num1 db 5,23,10,100,200,150,50,86
count equ $-num1
org 2010h
num2 db 7,15,200,180,76,100,26,150
org 2020h
res db count dup(0)
data ends
②debug调试:修改num1和num2数组元素的值,运行看结果。
提示:-e2000
-d2000
1:源代码
DATAS SEGMENT
org 2000h
num1 db 5,23,10,100,200,150,50,86
count equ $-num1
org 2010h
num2 db 7,15,200,180,76,100,26,150
org 2020h
res db count dup(0)
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,00H
MOV CX,08H
NEXT:
MOV AL,num1[BX]
ADD AL,num2[BX]
MOV res[BX],AL
INC BX
LOOP NEXT
MOV AH,4CH
INT 21H
CODES ENDS
END START
2:实验结果截图
2) 考虑进位。
①已知数据段的定义:
data segment
org 2000h
num1 db 5,23,10,100,200,150,50,86
count equ $-num1
org 3000h
num2 db 7,15,200,180,76,100,26,150
org 5000h
res dw count dup(0)
data ends
②debug调试:修改num1和num2数组元素的值,运行看结果。
提示:-e2000
-d2000
1:源代码
DATAS SEGMENT
org 2000h
num1 db 5,23,10,100,200,150,50,86
count equ $-num1
org 2010h
num2 db 7,15,200,180,76,100,26,150
org 2020h
res dw count dup(0)
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,00H
MOV CX,08H
MOV DI,00H
NEXT:
MOV AL,num1[SI]
MOV AH,0
MOV BL,num2[SI]
MOV BH,0
ADD AX,BX
MOV res[DI],AX
INC SI
INC DI
INC DI
LOOP NEXT
MOV AH,4CH
INT 21H
CODES ENDS
END START
2:实验结果截图