西安电子科技大学
微机原理与系统设计实验 课程上机报告
上机内容 1-DEBUG程序调试及上机步骤、2-顺序程序设计、3-分支程序设计 、4-循环程序设计、5-子程序设计、6-DOS系统功能调用、7-字符串程序设计、8-宏指令程序设计
上机内容一(1) DEBUG程序调试
一、上机目的
学习使用DEBUG常用调试命令;
学习用DEBUG命令调试简单程序;
通过调试,熟悉汇编语言指令、寄存器、标志位、堆栈等。
二、上机内容
用DEBUG的命令对简单程序段进行调试练习(内容参看本小节第三部分)。
三、DEBUG练习程序段
(1)在DEBUG下用A命令输入以下加法程序段,按照命令运行程序。
-A CS:0106 ↙ MOV AX,1234 MOV BX,2345 MOV CX,0 ADD AX,BX MOV CX,AX INT 20 |
运行程序。
-R ↙ ;显示各寄存器当前内容及首条指令
-T 3 ↙ ;跟踪执行三条赋值传送指令,观察寄存器及标志位
-T 2 ↙ ;跟踪执行相加及传送结果指令,观察寄存器及标志位
-G ↙ ;执行软件中断指令INT 20
实验现象记录与分析:观察与记录按照上述要求命令执行后,哪些寄存器和标志位发生了变化。
T3:AX,BX,CX寄存器分别发生变化同时IP也随着指令执行而变化
T2:CX和IP寄存器发生变化
(2)在DEBUG下用A命令输入以下加法程序段,按照命令运行程序。
-A CS:116 ↙ MOV AX,[0124] MOV BX ,[0126] ADD AX,BX MOV [0128],AX INT 20 DW 3333 DW 9999 DW 0 |
设置断点分段运行程序。
-G=CS:116 11D ↙ ;从指定地址开始运行程序,至断点11DH停止,这时两个数已取至AX和BX,但还没有求和
-G122 ↙ ;从上一断点运行至新断点停止,这时已完成求和并存入结果到指定单元
-G ↙ ;完成程序的执行
观看内存内容:
-DCS:116 12A ↙ ;显示本程序小段目标代码和数据单元内容
-UCS:116 12A ↙ ;反汇编指定范围的内存内容
实验现象记录与分析:观察与记录按照上述要求命令执行后,相应寄存器和标志位的变化;观察与记录指定范围内存的内容及对应指令,进一步理解汇编语言的概念。
指令先执行116到11d的指令,再跳转到122指令并执行,结果正确,ax=cccc
(3)在DEBUG下用A命令输入以下字符串显示程序段,按照命令运行程序。
-A CS:0192 ↙ MOV DX,19B MOV AH,9 INT 21 INT 20 DB ‘HELLO,WORLD! $’ |
用P 命令单步执行。
实验现象记录与分析:观察与记录使用P命令执行后,相应寄存器和标志位的变化。
主要是pf标志位变化,寄存器ax和ip随着指令变化。
分析:分析与查看‘HELLO,WORLD!$’在内存中存放的地址范围和对应的ASCII码。
-D 19b 1a7 ;
ASCII码为: 48 45 4C 4C 4F 2C 57 4F 52 4C 44 21 24 。
(4)在DEBUG下用A命令输入以下加法程序段,按照命令运行程序。
-A CS:0100 ↙ MOV AL,74 ADD AL,70 MOV AL,7A ADD AL,94 MOV AL,43 ADC AL,65 INT 20 |
用P命令单步执行。
实验现象记录与分析:观察与记录每条指令执行后AX寄存器及标志位变化;分析与理解进位与溢出的概念。
(5)在DEBUG下用A命令输入以下BCD码乘法程序段,按照命令运行程序。
-A CS:0100 ↙ MOV AL,05 MOV BL,09 MUL BL AAM INT 20 |
用P 命令单步执行。
实验现象记录:观察与记录每条指令执行后,AX、BX以及标志位的变化;分析与理解BCD码乘法的调整。
(6)在DEBUG下用A命令输入以下主程序与子程序段,按照命令运行程序。
-A CS:0100 ↙ MOV AX,0200 MOV DX,0000 CALL AX ;调用子程序 MOV DX,1234 ADD DH,DL MOV [0300],DX INT 20 ;********下面是子程序段******** -A CS:0200 ↙ PUSH AX MOV AX, 5678 POP AX RET |
用P命令或T命令跟踪执行。
实验现象记录与分析:
跟踪执行程序,观察与记录在子程序调用过程中IP、SP、堆栈栈顶存储单元内容的变化;分析与理解堆栈、子程序调用断点的保护与恢复。
上机内容一(2) 汇编语言程序设计实验基本步骤
一、上机目的
掌握汇编源程序编写的基本格式;
熟悉汇编语言程序设计实验环境;
掌握汇编语言源程序编辑、汇编、连接、调试的基本步骤;
掌握MASM、LINK、DEBUG的使用方法。
二、上机内容
对一个汇编语言源程序进行编辑、汇编、连接与调试。
代码描述:
代码:
DATA SEGMENT
DA1 DB'HELLO,WORLD!'
DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT
ST1 DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,STACK
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET DA1
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
汇编、连接与调试:
- 上机过程或步骤
- 建立工作目录,在D盘建立zhangsan文件夹,并将源程序myfile.asm文件和masm.exe、link.exe文件复制至该文件夹
- 编辑如上的源程序
- 进入dos环境
- 汇编源程序生成.obj文件
- 连接.obj文件生成.exe文件
- 运行.exe程序,检查结果
- 进入debug环境,调试程序
上机内容二 顺序程序设计
一、上机目的
1.掌握指令编程及程序调试的方法;
2.学会运用顺序程序解决实际问题的方法。
二、上机内容
1.学习示例并运行。
2.根据题目要求编写程序。参考示例步骤,写出上机过程,观察现象,记录结果,进行分析。
1)计算y=a×b+c-18,其中a、b、c分别为3个有符号(或无符号)的8位二进制数。
2)用查表法,将一位十六进制数(0~F)转换成对应的ASCII码(只考虑大写字母)。
三、上机过程或步骤
- 建立工作目录,在D盘建立8086文件夹,并将源程序文件和masm.exe、link.exe文件复制至该文件夹
- 编辑如上的源程序(具体代码见下)
- 进入dos环境
- 汇编源程序生成.obj文件
- 连接.obj文件生成.exe文件
- 进入debug环境,调试程序,检查结果
- 上机程序
示例代码:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
XL DW ?;请在此处给X低位赋值
XH DW ?;请在此处给X高位赋值
YL DW ?;请在此处给Y低位赋值
YH DW ?;请在此处给Y高位赋值
ZL DW ?
ZH DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,XL
ADD AX,YL
MOV ZL,AX
MOV AX,XH
ADC AX,YH
MOV ZH,AX
INT 03H
CODE ENDS
END START
题目1代码:
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
DAT1 DB ?
DAT2 DB ?
DAT3 DB ?
DAT4 DW ?
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
MOV AL,DAT1
MOV BL,DAT2
IMUL BL
MOV BX,AX
MOV AL,DAT3
CBW
ADD AX,BX
SUB AX,18
MOV DAT4,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目2代码:
assume ds:data,cs:code
data segment
table DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,39H,41H,42H,43H,44H,45H,46H
hex DB ?;设置你想要的转换的16进制数
ascll DB 0;用于保存转换之后的值
data ends
code segment
start:
mov ax,data
mov ds,ax
lea si,table
mov al,hex
mov bx,si
XLAT
mov ascll,al
INT 03H
code ends
end start
- 上机结果分析与总结
示例:
题目一:
通过e命令,将a、b、c,分别赋值为11H、45H、14H,得出y的值为497H,计算符合结果。
题目2:
将hex赋值为6,结果为36H,结果正确。
上机内容三 分支程序设计
一、上机目的
1.掌握分支程序的设计与调试方法;
2.掌握分支程序的指令和基本结构;
3.学会运用分支程序解决实际问题的方法。
二、上机内容
1.学习示例并运行。分析两个示例的分支结构及实现程序转移的指令。
2.根据题目要求编写程序。写出上机过程,观察现象,记录结果,进行分析。
1)用分支结构,将一位十六进制数(0~F)转换成对应的ASCII码(只考虑大写字母)。
2)在DS数据段存放着某班20个同学的微机原理考试成绩。统计≥90分、80分~89分、70分~79分、60分~69分和<60分的人数,并将统计的结果放在当前数据段偏移地址为BUFFER的顺序单元中。
三、上机过程
- 建立工作目录,在D盘建立8086文件夹,并将源程序文件和masm.exe、link.exe文件复制至该文件夹
- 编辑如上的源程序(具体代码见下)
- 进入dos环境
- 汇编源程序生成.obj文件
- 连接.obj文件生成.exe文件
- 进入debug环境,调试程序,检查结果
- 上机程序
示例1代码:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DAT1 DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,DAT1
CMP AL,0
JNS POSI
NEG AL
POSI: MOV DAT1,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
示例2代码:
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
JADT DW N1
DW N2
DW N3
DW N4
STRING1 DB 'This is a procedure 1',0AH,0DH,'$'
STRING2 DB 'This is a procedure 2',0AH,0DH,'$'
STRING3 DB 'This is a procedure 3',0AH,0DH,'$'
STRING4 DB 'This is a procedure 4',0AH,0DH,'$'
ER DB 'ERROR',0AH,0DH,'$'
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
AGAIN:MOV AH,01H
INT 21H
CMP AL,'Q'
JE EXIT
CMP AL,'q'
JE EXIT
CMP AL,31H
JB ERROR
CMP AL,34H
JA ERROR
SUB AL,30H
SHL AL,01H
CBW
MOV DI,AX
JMP JADT[DI-2]
N1:
MOV DX,OFFSET STRING1
MOV AH,09H
INT 21H
JMP AGAIN
N2:
MOV DX,OFFSET STRING2
MOV AH,09H
INT 21H
JMP AGAIN
N3:MOV DX,OFFSET STRING3
MOV AH,09H
INT 21H
JMP AGAIN
N4:MOV DX,OFFSET STRING1
MOV AH,09H
INT 21H
JMP AGAIN
ERROR:MOV AH,09H
MOV DX,OFFSET ER
INT 21H
JMP AGAIN
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START
题目1代码:
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL WORD
STACK ENDS
data segment
hex db ?
ascll DB ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov al,hex ;将一个字节的16进制存储在ax的低位中
add al,30h
cmp al,39h
jbe convertEnd ;judge below zero 小于等于
add al,7
convertEnd:
mov ascll,al
int 03h
code ends
end start
题目2代码:
DATA SEGMENT
DATA1 DB 20 DUP(?)
DATA2 DB 5 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,20
LEA SI,DATA1
LEA DI,DATA2
AGAIN:MOV AL,[SI]
CMP AL,90
JC NEXT1
INC BYTE PTR[DI]
JMP STO
NEXT1:CMP AL,80
JC NEXT2
INC BYTE PTR[DI+1]
JMP STO
NEXT2: CMP AL,70
JC NEXT3
INC BYTE PTR[DI+2]
JMP STO
NEXT3: CMP AL,60
JC NEXT4
INC BYTE PTR[DI+3]
JMP STO
NEXT4:INC BYTE PTR[DI+4]
STO:INC SI
LOOP AGAIN
MOV AH,4CH
INT 21H
CODE ENDS
END START
- 上机结果分析与总结
示例1:
示例2:
题目1:
题目2:
上机内容四 循环程序设计
一、上机目的
1.掌握循环程序的设计与调试方法;
2.掌握循环程序的指令和基本结构;
3.学会运用循环程序解决实际问题的方法。
二、上机内容
1.学习示例并运行。分析此示例的循环结构及组成部分。
2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。
1)将ADRS开始存放的10个字节的数据传送到ADRD开始的连续内存中。假设它们的段地址分别存放在DS和ES中。
2)将ADRS开始存放的10个字节的数据传送到ADRD开始的连续内存中。假设它们的段地址分别存放在DS和ES中。如果传送过程中出现‘#’时,立即停止传送。
3)设DATBUF中存放有10个无符号数(或有符号数),将10个数据按照数值大小递减排列。
4)设DATBUF中存放有10个无符号数(或有符号数),求它们的最小值和最大值,将最小值放入DATMIN单元,最大值放入DATMAX单元。
三、上机过程或步骤
- 建立工作目录,在D盘建立8086文件夹,并将源程序文件和masm.exe、link.exe文件复制至该文件夹
- 编辑如上的源程序(具体代码见下)
- 进入dos环境
- 汇编源程序生成.obj文件
- 连接.obj文件生成.exe文件
- 进入debug环境,调试程序,检查结果
四、上机程序
示例代码:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
ORG 3000H
DATA1 DB 16 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET DATA1
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A1:
MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2:
INC DI
LOOP A1
MOV [DI],BL
INT 03H
CODE ENDS
END START
题目1:
data segment
adrs dw ?
adrd dw ?
data1 db 10 dup(0)
data2 db 10 dup(0)
data ends
stack segment
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov si,adrs
mov di,adrd
mov cx,10
next:
mov al,[si]
mov [di],al
inc di
inc si
dec cx
jnz next
mov ah,4ch
int 21h
code ends
end start
题目2:
data segment
adrs dw ?
adrd dw ?
data1 db 10 dup(0)
data2 db 10 dup(0)
data ends
stack segment
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov si,adrs
mov di,adrd
mov cx,10
next:
mov al,[si]
cmp al,23H
JE NEXT0
mov [di],al
inc di
inc si
dec cx
jnz next
NEXT0:
mov ah,4ch
int 21h
code ends
end start
题目3:
DSEG SEGMENT
DATBUF DW 10 DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA DI, DATBUF
MOV BL,9
NEXT1: MOV SI,DI
MOV CL,BL
NEXT2: MOV AX,[SI]
INC SI
INC SI
CMP AX,[SI]
JC NEXT3 ;小于则不交换
MOV DX,[SI]
MOV [SI-2],DX
MOV [SI],AX
NEXT3: DEC CL
JNZ NEXT2
DEC BL
JNZ NEXT1
MOV AH,4CH
INT 21H
CSEG ENDS
END START
题目4:
DATA SEGMENT
DATBUF DB 15,1,2,3,0,8,14,13,10,5 ;定义数组
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
XOR CX,CX
MOV CL,1O
SUB CL,1
MOV SI,OFFSET DATBUF ;使指针si指向array
MOV BH,[SI] ;把si指向的内容赋值给bh
MOV BL,[SI] ;把si指向的内容赋值给bl
INC SI ;si指针自增1
CALL FIND ;执行find子程序,其程序功能是找出最大与最小值
INT 03H
MOV AH,4CH ;结束程序
INT 21H
FIND PROC
X: MOV AL,[SI] ;把si指向地址的内容赋值给AL
CMP AL,BL ;al和bl比较
JB CHANGE_BL ;如果al比较小则跳change_bl函数
F: CMP AL,BH ;al和bh比较
JA CHANGE_BH ;如果al比较大则跳转change_bh函数
NEXT:
INC SI ;si指针自增1
LOOP X ;做循环 当cl=0时,退出循环执行下一条语句
JMP OVER ;跳到over函数
CHANGE_BL: ;把al的值赋给bl
MOV BL,AL
JMP F ;跳f函数
CHANGE_BH: ;把al的值赋给bh
MOV BH,AL
JMP NEXT ;跳next函数
OVER: ;结束子函数
RET
FIND ENDP
CODE ENDS
END START
- 上机结果分析与总结
示例:
题目1:
题目2:
题目3:
题目4:
上机内容五 子程序设计
一、上机目的
1.掌握子程序的设计与调试方法;
2.理解参数传递的方法;
3.掌握子程序调用的指令和基本结构;
4.学会用子程序解决实际问题的方法。
二、上机内容
1.学习示例并运行。考虑如何通过寄存器及堆栈方式进行参数传递。
2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。
1)统计一个字中的1的个数。采用段内调用实现。
2)统计一个字中的1的个数。采用段间调用实现。
三、上机过程或步骤
四、上机程序
示例:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
BCD1 DB 5 DUP(?)
ADSEG DW ?
ADOFST DW ?
LENG1 DW ?
RESULT DW ?
DATA ENDS
CODEM SEGMENT
ASSUME CS:CODEM,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV AX,SEG BCD1
MOV ADSEG,AX
MOV AX,OFFSET BCD1
MOV ADOFST,AX
MOV AX,LENGTH BCD1
MOV LENG1,AX
CALL FAR PTR BCD_16B
MOV AH,4CH
INT 21H
CODEM ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATA,ES:DATA
BCD_16B PROC FAR
PUSH BX
PUSH AX
PUSH SI
PUSH ES
PUSH DS
MoV AX,DATA
MOV DS,AX
MOV ES,ADSEG
MOV SI,ADOFST
MOV CX,LENG1
ADD SI,CX
DEC SI
MOV DX,0
BCDL:
PUSH CX
MOV AL,ES:[SI]
DEC SI
AND AL,0FH
CBW
MOV BX,AX
MOV AX,DX
MOV CX,10
MUL CX
MOV DX,AX
ADD DX,BX
POP CX
LOOP BCDL
MOV ES:RESULT,DX
POP DS
POP ES
POP SI
POP AX
POP BX
RETF
BCD_16B ENDP
CODES ENDS
END START
题目1:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DATA1 DW ?
COUNT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,DATA1
MOV CL,0
CALL CUNT
MOV AH,4CH
INT 21H
CUNT PROC NEAR
A:TEST AX,0FFFFH
JZ B
SHL AX,1
JNC A
INC CL
JMP A
B:MOV COUNT,CL
CUNT ENDP
CODE ENDS
END START
题目2:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DATA1 DW 7521H
COUNT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,DATA1
MOV CL,0
CALL FAR PTR CUNT
MOV AH,4CH
INT 21H
CODE ENDS
CODEM SEGMENT
ASSUME CS:CODEM
CUNT PROC FAR
A:TEST AX,0FFFFH
JZ B
SHL AX,1
JNC A
INC CL
JMP A
B:MOV COUNT,CL
RETF
CUNT ENDP
CODEM ENDS
END START
- 上机结果分析与总结
示例:
题目1:
题目2:
上机内容六 DOS系统功能调用
一、上机目的
1.掌握DOS系统功能调用的程序设计方法;
2.学会用DOS系统功能调用解决实际问题的方法。
二、上机内容
1.学习示例并运行。分析此示例中DOS系统功能调用的过程。
2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。
1)用AH=02H功能,在PC机的显示器上显示“HOW ARE YOU TODAY?”
2)用AH=09H功能,在PC机的显示器上显示“HOW ARE YOU TODAY?”
3)实现从键盘接收一串字符并回显,且统计与显示出该字符串的长度。
三、上机过程或步骤
四、上机程序
示例:
STACK SEGMENT STACK
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
STRING DB'PLEASE INPUT STRING'
DB 0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目1:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DAT1 DB 'HOW ARE YOU TODAY?$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET DAT1
MOV CX,18
NEXT:MOV DL,[DI]
MOV AH,02H
INT 21H
INC DI
LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目2:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DAT1 DB 'HOW ARE YOU TODAY?$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET DAT1
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目3:
DATA SEGMENT
INPUT DB "Please input a string: ",'$'
OUTPUT DB "Your input is: ",'$'
BUFFER DB 20 ;预定义20字节的空间
DB ? ;待输入完成后,自动获得输入的字符个数
DB 20 DUP(0)
CRLF DB 0AH, 0DH,'$'
DATA ENDS
STACK SEGMENT STACK
DW 20 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
LEA DX, INPUT ;打印提示输入信息
MOV AH, 09H
INT 21H
LEA DX,BUFFER ;接收字符串
MOV AH, 0AH
INT 21H
MOV AL, BUFFER+1 ;对字符串进行处理
ADD AL, 2
MOV AH, 0
MOV SI, AX
MOV BUFFER[SI], '$'
LEA DX, CRLF ;另取一行
MOV AH, 09H
INT 21H
LEA DX, OUTPUT ;打印提示输出信息
MOV AH, 09H
INT 21H
LEA DX, BUFFER+2 ;输出输入的字符串
MOV AH, 09H
INT 21H
LEA DX, CRLF ;另取一行
MOV AH, 09H
INT 21H
MOV DL,BUFFER+1 ;打印提示输出信息
ADD DL,48
MOV AH, 02H
INT 21H
MOV AH, 4CH ;返回DOS系统
INT 21H
CODE ENDS
END START
- 上机结果分析与总结
示例:
题目1:
一、上机目的
1.掌握字符串指令及字符串程序设计的方法;
2.学会用字符串程序解决实际问题的方法。
二、上机内容
1.学习示例并运行。分析编写字符串程序需要什么样的步骤。
2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。
1)设在数据段中定义了:
STRING DB ‘Today is Sunday & July 15,2018’ |
实现将STRING中的“&”用“/”代替并将替换后的字符串显示出来。
2)将字符‘#’装入以AREA为首址的100个字节中。
三、上机过程或步骤
- 建立工作目录,在D盘建立zhangsan文件夹,并将源程序myfile.asm文件和masm.exe、link.exe文件复制至该文件夹
- 编辑如上的源程序
- 进入dos环境
- 汇编源程序生成.obj文件
- 连接.obj文件生成.exe文件
- 运行.exe程序,检查结果
- 进入debug环境,调试程序
四、上机程序
示例:
STACK SEGMENT
DB 64 DUP(?)
STACK ENDS
DATA SEGMENT
STR1 DB 'ASSEMBLE LANGUAGE'
DATA ENDS
EDD SEGMENT
STR2 DB 20 DUP(?)
EDD ENDS
CODE SEGMENT
ASSUME SS:STACK,DS:DATA,CS:CODE,ES:EDD
START:
MOV CX,17
MOV AX,DATA
MOV DS,AX
LEA SI,STR1
MOV AX,EDD
MOV ES,AX
LEA DI,STR2
CLD
REP MOVSB
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目1:
STACK SEGMENT
DB 64 DUP(?)
STACK ENDS
DATA SEGMENT
STR1 DB 'ASSEMBLE LANGUAGE'
DATA ENDS
EDD SEGMENT
STR2 DB 20 DUP(?)
EDD ENDS
CODE SEGMENT
ASSUME SS:STACK,DS:DATA,CS:CODE,ES:EDD
START:
MOV CX,17
MOV AX,DATA
MOV DS,AX
LEA SI,STR1
MOV AX,EDD
MOV ES,AX
LEA DI,STR2
CLD
REP MOVSB
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目2:
STACK SEGMENT
DW 256 DUP(?)
STACK ENDS
DATA SEGMENT
STR1 DB'#'
AREA DW ?
STR2 DB 150 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DI,AREA
MOV AX,'##'
MOV CX,50
CLD
REP STOSW
MOV AH,4CH
INT 21H
CODE ENDS
END START
- 上机结果分析与总结
示例:
题目1:
题目2:
上机内容八 宏指令程序设计
一、上机目的
1.学习宏指令程序的设计与调试;
2.学会用宏指令程序解决实际问题的方法。
二、上机内容
1.学习示例并运行。分析宏指令结构与子程序结构的特点。
2.根据题目要求编写程序。参考示例步骤写出上机过程,观察现象,记录结果,进行分析。
利用宏指令实现对某寄存器左移/右移几位,从而实现对某一存储单元的数据进行左移/右移几位。
三、上机过程或步骤
四、上机程序
示例:
SDISP MACRO STR
LEA DX,STR
MOV AH,09H
INT 21H
ENDM
STACK SEGMENT
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
DAT1 DB 'How are you?$'
DAT2 DB 0DH,0AH,'$'
DAT3 DB 'I am fine.$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
SDISP DAT1
SDISP DAT2
SDISP DAT3
MOV AH,4CH
INT 21H
CODE ENDS
END START
题目:
SHIFT MACRO N,REG,DIR
MOV CL,N
S&DIR REG,CL
ENDM
STACK SEGMENT
DB 256 DUP(?)
DATA SEGMENT
DATA1 DB ?
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 AL,DATA1
MOV DL,AL
SHIFT 4,DL,HR
MOV DATA1,DL
MOV AH,4CH
INT 21H
CODE ENDS
END START
- 上机结果分析与总结
示例:
题目: