资源描述
微机原理与系统设计上机报告
学 号:1404019
姓 名:**
指导老师:**
时 间:2016年11月
西安电子科技大学
35
内容一 Debug程序的使用
一、实验目的
1. 学习使用DEBUG调试命令。
2. 学习用DEBUG调试简单程序。
3. 通过程序验证码制及其对标志位的影响。
4. 通过调试熟悉和掌握各寄存器的作用与特点。
二、实验内容
用DEBUG调试简单程序。
三、实验仪器
微机一台
四、实验步骤
1.由DOS进入DEBUG调试环境。
(1) DEBUG将调试程序装入内存
注意:当机器控制权由DOS成功地转移给调试程序后,将显示“-”号,它是DEBUG的状态提示符,表示可以接受调试子命令了。
(2) -R 显示CPU中各寄存器当前初始内容,请记录下列各项:
AX=0000
BX=0000
CX=0000
DX=0000
BP=0000
SI=0000
DI=0000
DS=13E0
ES=13E0
SS=13E0
SP=FFEE
CS=13E0
IP=0100
FLAG寄存器中的8个标志位状态值是:
OF
DF
IF
SF
ZF
AF
PF
CF
NV
UP
EI
PL
NZ
NA
PO
NC
DEBUG用符号给出标志寄存器中8个标志位的当前状态,其含义如下表所示。
标志位含义
‘1’的对应符号
‘0’的对应符号
OF溢出
OV有
NV无
DF方向
DN递减
UP递增
IF中断
EI允许
DI禁止
SF符号
NG负
PL正
ZF全零
ZR零
NZ非零
AF辅助进位
AC有
NA无
PF奇偶性
PE偶
PO奇
CF进位
CY有
NC无
2.用DEBUG调试简单程序
例1 -A CS:0106
MOV AX,1234
MOV BX,2345
MOV CX,0
ADD AX,BX
MOV CX,AX
INT 20
运行程序
(注:执行程序时IP应指向要执行的指令,需要修改该寄存器
-RIP
当前值
输入需要值 该处为0106,当然也可以在T或G命令中指出程序起始地址)
-R 显示各寄存器当前内容及首条指令
-T 3 跟踪执行三条赋值传送指令,观察寄存器及标志位
-T 2跟踪执行相加及送和数指令,观察寄存器及标志位
-G 执行软件中断指令INT 20,机器将显示“程序正常终止”的信息,并显示“-”,表明仍处在DEBUG的调试控制状态下,注意未用T命令,因为我们不想进入到20H中断处理程序中去,P命令也可实现相同操作
实验现象记录:观察与记录按照上述要求命令执行后,哪些寄存器和标志位发生了变化。
例2 -A CS:116
MOV AX,[0124]
MOV BX ,[0126]
ADD AX,BX
MOV [0128],AX
INT 20
DW 2222
DW 8888
DW 0
设置断点分段运行程序
-G=CS:116 11D 从指定入口运行程序,至断点11D停,可见两个数已取至AX,BX,但还没有求和
-G122 从上一断点运行至新断点停,已完成求和并存入指定结果单元
-G 完成程序
观看内存内容
-DCS:116 12A 显示本程序小段目标代码和数据单元内容
-UCS:116 12A 反汇编指定范围的内存内容-
实验现象记录:观察与记录指定范围的内存内容;通过反汇编,观察与记录指定范围的内存内容及对应指令。
例3 -A CS:0192
MOV DX,19B
MOV AH,9
INT 21
INT 20
DB ‘HELLO,WORLD! $’
-P 命令单步执行
实验现象记录:观察每条指令执行后各寄存器的变化,记录DX,AX的变化。
思考:根据程序输入情况,考虑‘HELLO,WORLD!$’在内存中的ASCⅡ码和地址范围
-D 109C 01A7 (如下图)
ASCⅡ码为: 45 4C 4C 4F 2C 57 4F 52 4C 44 21 24 ;
例4 自己设计一段小程序验证补码的加法、进位、溢出的概念;
参考程序(可对数据进行修改):
-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及标志位变化。
AX及标志位变化如下图:
例5
1. 使用R命令,实现AX=0108,BX=F1AA
如下图:
2.编辑下列程序
-A CS:0100
MOV AL,05
MOV BL,09
MUL BL
AAM
INT 20
-P 命令执行单步执行
实验现象记录:记录每条指令执行后,AX、BX以及标志位的变化。
例6 执行下列程序,用P命令或T命令跟踪
-A CS:0100
MOV AX,0200
MOV DX,1E4F
CALL AX ;调用子程序
MOV DX,167C
ADD DH,DL
MOV [0300],DX
INT 20
;********下面是子程序段********
-A CS:0200
PUSH AX
MOV AX, 010B
POP AX
RET
实验现象记录:
1)跟踪执行程序,观察在子程序调用过程中
IP 0201 SP FFEC 堆栈区域内容 13DE: FFEC
0204 FFEC 13DE:FFEC
0205 FFEE 13DE:FFEE
2)程序运行完毕后DS:[0300]中的内容为 0000
3)如果去掉POP AX,程序执行后DS:[0300]中内容为 4F6D
内容二 汇编语言上机环境及基本步骤
一、实验目的:
1. 掌握编写汇编源程序的基本格式。
2. 熟悉汇编语言上机环境。
3. 掌握汇编源程序的编辑和修改,熟悉EDIT或记事本的使用方法。
4. 掌握汇编源程序编译、连接成可执行文件的过程,熟悉MASM,LINK的使用方法。
二、实验内容:
在屏幕上显示并打印字符串“This is a sample program.”
三、实验仪器
微机一台
四、实验步骤:
1.在某盘如E盘,以自己的名字的汉语拼音建立一个工作目录(文件夹,名称不要太长,不超过8个字符比如zhangsan),将文件MASM.EXE,LINK.EXE等复制到该目录下,编辑的源文件也保存到该目录下。
从WINDOWS进入DOS环境:C:\>
2.用EDIT编辑SW1.ASM源文件。
(1). 从当前目录进入自己的目录下,
C:\>E: 回车
E:\> CD zhangsan ↙回车
键入EDIT并回车:
E:\ zhangsan>EDIT
根据菜单提示进行各种操作。
(2)进入EDIT编辑------EDIT是一种全屏幕编辑软件,可输入、编辑、修改、保存、另存源程序非常方便。
说明:也可在WIDNDOWS环境下用记事本编辑源文件,在保存时,保存类型应选择所有文件,不能选择文本文件(*.txt),否则在编译时会找不到源文件的。
(3).编辑新文件:
a、在EDIT编辑器中输入汇编源程序。
b、检查输入有无错误。
c、打开文件菜单FILEà选择另存为SAVE AS┅à输入文件名为:SW1.ASMà保存。
注意:保存到你自己的文件夹中
d、若需要修改此文件,用FILE菜单à选择打开OPENà输入文件名SW1.ASM,即可修改。修改后注意重新再存盘。
(4).编辑汇编源程序
a、在EDIT(或记事本)中输入源程序。
b、检查。
c、存盘。可保存为SW1.ASM
3.用汇编程序MASM将SW1.ASM文件汇编,生成SW1.OBJ目标文件。
(1).一般简单程序只需生成.OBJ文件,可键入简化命令:
E:\zhangsan>MASM SW1;↙
若有错误,则显示错误行号及错误性质,如:
SW1.ASM(5):error A2006:undefined symbor:xxxx
(2).若有错重新进入EDIT进行修改。修改后并再存盘,退出编辑,回到DOS,再汇编。
E:\ zhangsan >MASM SW1;↙
(3).没有任何错误时,显示:
Assembling:SW1.asm
表示汇编成功,生成SW1.OBJ文件。
(4).用DIR命令查看应有SW1.OBJ:
E:\ zhangsan >DIR SW1.*
4.用连接程序LINK将SW1.OBJ文件连接,生成SW1.EXE可执行文件。
(1).一般仅生成SW1.EXE文件, 可键入简化命令:
E:\ zhangsan >LINK SW1;↙
若有错误,则显示错误信息,则应返回编辑、修改、存盘,再汇编、连接直到连接成功,生成SW1.EXE可执行文件。
(2).用DIR命令查看应有SW1.EXE:
E:\ zhangsan >DIR SW1.*↙
5.运行SW1.EXE文件
E:\ zhangsan> SW1 ↙
执行SW1.EXE文件,屏幕应显示:“This is a sample program.”。由连接程序生成的.EXE,在DOS下,直接键入文件名(不要扩展名.EXE)就可以把文件装入内存,并立即执行。但有的程序没有直接显示结果;对于较复杂程序难免会出现错误,直接观察很难找到错误所在,这样就要借用调试程序进行调试。
实验现象记录:记录调试过程中出现的问题及修改措施,并记录程序执行结果。
五、实验源程序
DATA SEGMENT
DA1 DB 'This is a simple program.'
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
内容三 顺序程序设计
一、实验目的
1)掌握使用指令编程及调试的方法;
2)掌握指令对状态标志位的影响及其测试方法;
3)学会运用顺序程序解决实际问题的方法。
二、实验设备
PC机一台
三、实验内容及步骤
1.
(1)题目 计算X+Y=Z,将结果Z存入某存贮单元。
本实验程序是2个16位,即32位运算,利用累加器AX,先求低16位和,并存入低地址存贮单元,后求高16位和,再存入高地址存贮单元。由于低位和可能向高位有进位,因而高位相加语句须用ADC指令,则低位相加有进位时CF=l,高位字相加时,同时加上CF中的1。
参考程序如下:
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
(2)实验步骤
1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。
2)用DEBUG的U命令查看 MOV AX,XXXX (DATA)语句,即得到数据段基址DS:XXXX,用E命令E XXXX:0000给XL,XH,YL,YH赋值存入十六进制数A0 65 15 00和9E B7 21 00。
3)用G命令运行以上程序。
4)用D XXXX:0008 显示计算结果:3E 1D 37 00
5) 反复试几组数,考查程序的正确性。
2.写出计算y=a*b+c-18的程序,其中a、b、c分别为3个带符号的8位二进制数。
同1一样,写出上机过程,观察现象,记录结果
内容四 分支程序设计
一、实验目的
1)学习分支程序的设计与调试方法;
2)掌握分支程序的指令和基本结构。
二、实验设备
PC机一台
三、实验内容及步骤
1.求某数X的绝对值,并送回原处
同上,写出上机过程,观察现象及记录结果
2.写出将一位十六进制数转换成对应的ASXII码的程序(只考虑大写字母)。
同上,写出上机过程,观察现象及记录结果
3. 参看课本例3,在DS数据段偏移地址为DATA开始的顺序20个单元中,存放着某班80个同学的微型机原理考试成绩。现欲编程序统计≥90分、80分~89分,70分~79分60分~69分和<60分的人数,并将统计的结果放在当前数据段偏移地址为BUFFER的顺序单元中。
同上,写出上机过程,观察现象及记录结果
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
CJ DB 20 DUP(?)
BUFFER DB 5 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV DX,0000H
MOV BX,0000H
MOV AH,00H
MOV CX,20
LEA SI,CJ
LEA DI,BUFFER
GOON: MOV AL,[SI]
CMP AL,90
JC NEXT1
INC DH
JMP STOR
NEXT1:CMP AL,80
JC NEXT2
INC DL
JMP STOR
NEXT2:CMP AL,70
JC NEXT3
INC BH
JMP STOR
NEXT3:CMP AL,60
JC NEXT4
INC BH
JMP STOR
NEXT4:INC BL
STOR: INC SI
LOOP GOON
MOV [DI],DH
MOV [DI+1],DL
MOV [DI+2],BH
MOV [DI+3],BL
MOV [DI+4],AH
MOV AH,4CH
INT 21H
CODE ENDS
END START
内容五 循环程序设计
一、实验目的
1)学习循环程序的设计与调试方法;
2)掌握循环程序的基本结构。
二、实验设备
PC机一台
三、实验内容及步骤
1.
(1)题目:求某数据区内负数的个数。
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个检查区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即可得到所包含负数的个数。
参考程序:
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 ;CH清零
MOV BL,CH ;BL清零
INC DI ;指针指向第一个数据
A1: MOV AL,[DI]
TEST AL,80H ;数据首位是否为1
JE A2
INC BL ;负数个数累加
A2: INC DI
LOOP A1
MOV [DI],BL ;存结果
INT 03H
CODE ENDS
END START
(2)实验步骤
1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。
2)用DEBUG的U命令查看 MOV AX,XXXX(DATA))语句,即得到数据段基址DS:XXXX,
3)用E命令输入数据如下:
E XXXX:3000H 3000H单元的内容为06(数据个数)
3001H单元开始的内容为12、88、82、90、22、33。
4)用G命令运行以上程序。
5)用D命令检查3007H单元是否显示结果03。
学习本题目。
2.
课堂讲的数据传送题,传送数据变为10个数,写出完整的程序并调试,
1) 将ADRS开始存放的100个字节的数据传送到ADRD开始的连续内存中。假设他们的段地址分别存放在DS和ES中。
STACK SEGMENT
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
ADRS DB 10 DUP(?)
ADRD DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AX,ES
MOV AX,STACK
MOV SS,AX
LEA SI,ADRS
LEA DI,ADRD
MOV CX,100
NEXT: MOV AL,[SI]
MOV ES:[DI],AL
INC SI
INC DI
LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
2) 将ADRS开始存放的100个字节的数据传送到ADRD开始的连续内存中。假设他们的段地址分别存放在DS和ES中。如果传送过程中出现‘#’时,立即停止传送。
STACK SEGMENT STACK
DW 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
ADRS DB 100 DUP(?)
ADRD DB 100 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
LEA SI,ADRS
LEA DI,ADRD
MOV CX,100
MOV AL,[SI]
CMP AL,'#'
JE PEND
AGAIN: MOV ES:[DI],AL
INC SI
INC DI
MOV AL,[SI]
CMP AL,'#'
LOOPNE AGAIN
PEND: MOV AH,4CH
INT 21H
CODE ENDS
END START
3. 课堂讲的排序题,递减排列。
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
DATBUF DB 10 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
MOV CX,LENGTH DATBUF
MOV SI,CX
MOV BL,0FFH
LOOPA: CMP BL,0FFH
JNZ DONE
MOV BL,00
DEC CX
JZ DONE
PUSH SI
PUSH CX
LOOPB: DEC SIG
MOV AL,[SI]
CMP AL,[SI-1]
JAE LA
XCHG AL,[SI-1]
MOV [SI],AL
MOV BL,0FFH
LA: LOOP LOOPB
POP CX
POP SI
JMP LOOPA
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START
;DATA=1427H,STACK=1407H,OFFSET TOP=200H,CX=000AH,
4.设DATBUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值和最大值,将最小值放入DATMIN单元,最大值放入DATMAX单元。
DATA SEGMENT
DATA1 DB 16 DUP(?)
DATMIN DB ?
DATMAX DB ?
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,[DI+1]
MOV DATMIN,BL
MOV DATMAX,BL
MOV AL,01H
AGAIN:INC DI
INC AL
CMP CL,AL
JS DONE
MOV BL,DATMIN
CMP BL,[DI+1]
JS A1
MOV BL,[DI+1]
MOV DATMIN,BL
JMP A1
A1: MOV BL,DATMAX
CMP BL,[DI+1]
JNS AGAIN
MOV BL,[DI+1]
MOV DATMAX,BL
JMP AGAIN
DONE:MOV AH,4CH
INT 21H
CODE ENDS
END START
写出以上题目的程序、上机调试过程及现象,并记录结果。
内容六 子程序设计
一、实验目的
1)学习子程序程序的设计与调试方法;
2)掌握子程序程序的基本结构。
二、实验设备
PC机一台
三、实验内容及步骤
题目:编写程序,统计一个字中的1的个数。分别采用段内调用和段间调用实现。
STACK SEGMENT STACK
DW 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
TW DW ?
TWIS DW ?
DATA ENDS
CODE1 SEGMENT
ASSUME CS:CODE1,DS:DATA,SS:STACK
MAIN: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOP
MOV AX,TW
CALL FAR PTR BCNT1
PUSH BX
MOV AL,AH
CALL FAR PTR BCNT1
POP AX
ADD AX,BX
MOV TWIS,AX
MOV AH,4CH
INT 21H
CODE1 ENDS
CODE2 SEGMENT
ASSUME CS:CODE2
BCNT1 PROC FAR
MOV BX,0
MOV CX,08
BLOOP1: ROL AL,01
JNC BLOOP2
INC BX
BLOOP2: LOOP BLOOP1
RET
BCNT1 ENDP
CODE2 ENDS
END MAIN
内容七 DOS系统功能调用
一、实验目的
学习DOS系统功能调用;
二、实验设备
PC机一台
三、实验内容
题目:在显示器上显示A~Z 26个英文字母。
参考程序:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START: MOV CX,001AH
MOV BL,41H
MOV AH,02H
A1: MOV DL,BL
INT 21H
INC BL
PUSH CX
MOV CX,0FFFFH
A2: LOOP A2
POP CX
DEC CX
JNZ A1
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验步骤:
1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。
2)运行实验程序,并观察实验结果。
3) 修改程序,使显示结果重复5次后退出。
程序如下:
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:
MOV DH,05H
A0: MOV CX,001AH
MOV BL,41H
MOV AH,02H
A1: MOV DL,BL
INT 21H
INC BL
DEC CX
JNZ A1
DEC DH
JNZ A0
MOV AH,4CH
INT 21H
CODE ENDS
END START
4)修改程序,在显示器显示:“HOW ARE YOU TODAY?”
要求分别用AH=02H用和AH=09H来完成。
程序如下:
AH=02H
STACK SEGMENT
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
TW DB 'HOW ARE YOU TODAY?$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET TW
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
内容八 字符串
一、实验目的
学习字符串指令及相关程序的调试。
二、实验设备
PC机一台
三、实验内容及步骤
1、设在数据段中定义了:
STR1 DB ‘ASSEMBLE LANGUAGE’
STR2 DB 20 DUP(?)
利用字符串指令从左到右将STR1将中的字符串传送到STR2。
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL BYTE
STACK ENDS
DATA SEGMENT
STR1 DB 'ASSEMBLE LANGUAGE'
STR2 DB 20 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,OFFSET TOP
MOV CX,20
LEA SI,STR1
LEA DI,STR2
CLD
AGAIN: MOVSB
LOOP AGAIN
MOV AH,4CH
INT 21H
CODE ENDS
END START
2、设在数据段中定义了:
STRING DB ‘Today is Sunday & July 16,2000’
编写程序实现将STRING中的“&”用“/”代替并将替换后的字符串显示出来。
程序如下:
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL BYTE
STACK ENDS
DATA SEGMENT
STR1 DB 'Today is Sunday & July 16,2000'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV ES,AX
MOV DI,OFFSET STR1
MOV CX,30
MOV AL,'&'
CLD
AGAIN: SCASB
JZ FIND
LOOP AGAIN
MOV AH,4CH
INT 21H
FIND: MOV BYTE PTR ES:[DI-1],'/'
MOV CX,30
MOV DI,OFFSET STR1
A0: MOV DL,ES:[DI]
MOV AH,02H
INT 21H
INC DI
LOOP A0
MOV AH,4CH
INT 21H
CODE ENDS
END START
3、 编程实现将第二题中STRING字符串中的小写字母变换成大写字母显示。
程序如下:
STACK SEGMENT
DB 256 DUP(?)
STACK ENDS
DATA SEGMENT
STRING DB "Today is Sunday & July 16,2000",0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
LEA SI,STRING
MOV CX,30
A0: MOV AL,[SI]
CMP AL,61H
JB A1
CMP AL,7AH
JA A1
SUB AL,20H
MOV [SI],AL
A1: INC SI
LOOP A0
LEA DX,STRING
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
内容九 宏
采用宏指令,实现在屏幕上显示出指定的字符串,如下面两句:
how are you?
I am fine.
程序如下:
PRINT MACRO N
MOV DX,OFFSET N
MOV AH,09H
INT 21H
ENDM
STACK SEGMENT
DW 256 DUP(?)
TOP LABEL BYTE
STACK ENDS
DATA SEGMENT
DATA1 DB 'how are you?'
DATA2 DB 0DH,0AH
DATA3 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
MOV SP,OFFSET TOP
PRINT DATA1
MOV AH,4CH
INT 21H
CODE ENDS
END START
目 录
第一章 总 论 1
一、项目提要 1
二、可行性研究报告编制依据 2
三、综合评价和论证结论 3
四、存在问题与建议 4
第二章 项目背景及必要性 5
一、项目建设背景 5
二、项目区农业产业化经营发展现状 11
三、项目建设的必要
展开阅读全文