湖工大学计通学院期末考试汇编语言历届考试重点提示Word格式.docx
《湖工大学计通学院期末考试汇编语言历届考试重点提示Word格式.docx》由会员分享,可在线阅读,更多相关《湖工大学计通学院期末考试汇编语言历届考试重点提示Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
……
4.设计一个延时子程序DELAY。
DELAYPROC
PUSHCX
PUSHDI
PUSHF
MOVCX,6000H
AB0:
MOVDI,5000H
AB1:
DECDI
JNZAB1
LOOPAB0
POPF
POPDI
POPCX
RET
DELAYENDP
(延时:
5000H*6000H)
5.已知某外设端口A地址为288H,端口B为28AH,编程以A端口输入数据再从B端口输出,程序一直运行,按任意键退出。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,288H
INAL,DX
MOVDX,28AH
OUTDX,AL
……
MOVAH,01H
INT16H
JESTART
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
一.实验
实验二
1.用汇编语言编写一个计算“3+5”的加法程序,执行后显示计算结果。
codesegment
assumecs:
code
start:
moval,33h
movdl,35h
adddl,al
subdl,30h
movah,02h
int21h
movah,4ch
codeends
endstart
2.用汇编语言编写一个求AX与BX寄存器中两个无符号数之差的绝对值,将结果放在DX中。
(文件名用自己的名字扩展名为.ASM)
codesegment
cmpax,bx
jcdelay
subax,bx
movdx,ax
hlt
delay:
subbx,ax
movdx,bx
实验三
1.编写一个加法程序,完成“1325+9839”要求用ASCII码形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加的结果显示出来。
DATASEGMENT
DATA1DB‘5’,‘2’,‘3’,‘1’
DATA2DB‘9’,‘3’,‘8’,‘9’,‘0’
DATAENDS
STACKSEGMENTPARASTACK‘STACK’
DB64DUP(?
)
STACKENDS
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
STARTPROCFAR
PUSHDS
MOVAX,00H
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX;
初始化程序
CLD;
DF为0,为正向串
MOVSI,OFFSETDATA1;
取数据1352所在存储单元的偏移地址
MOVDI,OFFSETDATA2;
取数据9839所在存储单元的偏移地址
MOVCX,04H;
计算次数→CX
MOVAX,00H;
将暂存标志寄存器的内容的AH寄存器清“0”
LOP1:
LODSDATA1;
取串操作,[SI]→AL,SI+1→SI
SAHF;
AH中的内容送标志寄存器
ADCAL,[DI];
将操作数带进位做加法
AAA;
ASCII码运算的十进制加法调整
LAHF;
将标志寄存器的内容暂存在AH寄存器
ORAL,30H;
计算值拼成ASCII码→AL
STOSB;
存串操作,AL→[DI],DI+1→DI
LOOPLOP1;
循环结束否?
未结束转到LOP1
ANDAH,01H;
结束将最高位的进位标志→AH
ORAH,30H;
将最高位的进位拼成ASCII码
MOV[DI],AH;
并送到DATA2的最后一个字节中
MOVAH,02H;
调用DOS中断的02h功能
MOVCX,05H;
显示数据位→CX
LOP2:
MOVDL,[DI];
将要显示数据送DL中
INT21H;
调用DOS的21H号中断
DECDI;
显示数据所在存储单元地址减“1”
LOOPLOP2;
显示完否?
未显示完转到LOP2
RET;
显示完返回DOS状态
实验四
1.分类统计字数组ARRAY中正数、负数和零的个数,并分别存入内存字变量POST、NEGA和ZERO中,数组元素个数保存在数组的第一个字中。
ARRAYDW8;
元素个数
DW230,-1437,26,-31,0,3458,0,10
POSTDW0
NEGADW0
ZERODW0
DATAENDS
CODESEGMENT
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
XORAX,AX;
用AX作为正数的计数器
XORBX,BX;
用BX作为负数的计数器
XORDX,DX;
用DX作为零的计数器
MOVCX,ARRAY;
用CX来进行循环计数
JCXZDONE;
考虑数组的元素个数为0的情况
LEADI,ARRAY+2;
;
用指针DI来访问整个数组
AGAIN:
CMPWORDPTR[DI],0;
与0做比较
JGHIGH;
大于0,为正数
JEEQUAL;
等于0
INCBX;
小于0,为负数,负数个数增1
JMPNEXT
HIGH:
INCAX;
正数个数增1
EQUAL:
INCDX;
0的个数增1
NEXT:
INCDI
LOOPAGAIN
DONE:
MOVPOST,AX;
把各类的统计数保存到内存单元中
MOVNEGA,BX
MOVZERO,DX
MOVAX,4C00H;
结束程序返回DOS
INT21H
ENDSTART
实验五
1.设计编写一个程序,要求执行时显示'
DOyouloveme?
Y/N'
输入y(ASCII=79H)就停止执行,返回DOS状态,按其它键则重复显示'
Y/N'
。
datasegment
bufdb'
Doyouloveme?
0ah,0dh,'
$'
dataends
codesegment
code,ds:
data
movax,data
movds,ax
movdx,offsetbuf
movah,9
movah,1
cmpal,'
y'
jeexit
Y'
movdl,0ah
movah,2
movdl,0dh
jmpstart
exit:
实验六
1.设计编写一个程序,从键盘上输入一串字符,计算每个字符出现的次数,并在屏幕上显示这个数字。
BUFFERDB100
DB?
DB100DUP(?
CHARSDB'
INPUT:
CODE,DS:
MAINPROCFAR
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETCHARS
MOVAH,9
MOVDX,OFFSETBUFFER
MOVAH,0AH
MOVDL,0AH
MOVAH,2
MOVDL,0DH
MOVSI,OFFSETBUFFER
INCSI
MOVAL,[SI]
MOVDL,[SI]
MOVDH,[SI]
MOVDI,SI
MOVCL,AL
MOVCH,0
MOVBL,1
MOVBH,0
DECCL
GO1:
CMPDL,[SI]
JNETO1
INCBL
TO1:
LOOPGO1
CALLOUTPUT
TO5:
DECAL
CMPAL,1
JETO3
CMPDH,[DI]
JETO5
MOVDL,[DI]
MOVSI,DI
GO2:
CMP[SI],DL
JNETO2
MOV[SI],DH
TO2:
LOOPGO2
JMPTO5
TO3:
JETO4
TO4:
RET
MAINENDP
OUTPUTPROC
PUSHCX
PUSHF
MOVDL,20H
MOVAL,BL
MOVAH,0
MOVCL,10
DIVCL
ADDAH,30H
ADDAL,30H
MOVCH,AH
MOVDL,AL
MOVDL,CH
POPF
POPCX
POPAX
OUTPUTENDP
ENDMAIN
实验七
1.设计编写一个程序,要求键盘输入单字符,但不显示,而是将该单字符的ASCII码加1后再显示出来(即输入A显示B,输入B则显示C……),程序一直运行,按ESC键则退出。
movah,8
cmpal,1Bh
addal,1
movdl,al
movah,2h
movah,4Ch
二.平时听课
1.8086为16位微处理器,数据总线16位,地址总线20位。
2.系统复位后,CPU从FFFF0H地址开始重新执行程序。
3.使AX清零:
MOVAX,0;
SUBAX,AX;
XORAX,AX。
4.设DS=1000H,[12000H]=67H,[12001H]=45H;
MOVAX,[2000H]则AX=4567H。
5.用两条指令完成将标志的低8位中ZF(D6),CF(D0),设置为1,其他位变为0:
AH:
01_0_0_1则AH可为01000001=41H;
所以:
MOVAH,41H
SAHF
6.比较DI,SI,如DI<
SI转delay执行,DI=SI转AD1执行,DI>
SI顺序向下执行。
CMPDI,SI
JCdelay
JZAD1
.
delay:
HLT
AD1:
7.MOVAX,8889H
SARAX,1则AX=C444H,CF=1;
MOVBX,56H
RCLBX,1则BX=00ADH,CF=0。
8.设32位数在DX:
AX中,实现32位数整个左移1位:
SALAX,1
RCLDX,1
9.用五条指令完成将当前数据段中3000H~3100H单元的内容,对应的传送到当前附加段5000H~5100H单元中去:
CLD
MOVCX,101H
MOVSI,3000H
MOVDI,5000H
REPMOVSB
10.将附加段中4000H~5000H单元的内容全部清零:
CLD
MOVCX,1001H
MOVDI,4000H
MOVAL,0H
REPSTOSB
或
STD
11.设源串在1000H:
2000H开始的100个字节单元中,要求将源串送到3000H:
1020H开始的目的串中:
MOVAX,1000H
MOVSI,2000H
MOVAX,3000H
MOVES,AX
MOVDI,1020H
MOVCX,64H
12.比较两个串,发现有不同的字符时则停止比较:
MOVCX,100
MOVSI,2500H
MOVDI,1400H
REPECMPSB
13.按ESC键退出:
CMPAL,1BH
JEEXIT
.
EXIT:
MOVAH,4CH
INT21H
14.按任意键退出:
MOVAH,1H
JNEEXIT
MOVAH,4CH
INT21H
三.CPU各标志的含义
标志10
溢出标志OFOVNV溢出非溢出
方向标志DFDNUP递减递增
中断允许IFEIDI允许不允许
符号标志SFNGPL负的正的
零标志ZFZRNZ零非零
辅助进位AFACNA有进位无进位
奇偶校检PFPEPO偶数个计数个
进位标志CFCYNC有进位无进位
四.伪指令segment,assume,end,DB,DW,proc,PTR操作符
1.段定义:
段名segment
段名ends
2.段分配:
assume段寄存器:
段名[,段寄存器:
段名,…]
3.程序结束:
end[标号]
4.变量定义:
[变量名]DB/DW表达式或nDUP(操作数)
5.过程定义:
过程名proc属性
过程名endp
6.PTR运算符(可用来修改变量或标号的类型属性):
类型PTR表达式
五.8086CPU的内部结构组成及各寄存器的用法
1.内部结构:
执行单元EU和总线接口部件BIU
2.段寄存器用法:
A.通用数据寄存器:
AX,BX,CX,DX;
AX作为累加器,BX作为基址寄存器,CX作为计数寄存器,DX作为数据寄存器
B.指针及变址寄存器:
SP,BP,SI,DI;
通常用来存放存储器单元的16位偏移地址;
SP用来指示堆栈顶的偏移地址,称为堆栈指针;
BP用来存放堆栈中的一个数据区的“基址”的偏移量,称为基址指针;
SI,DI称为变址寄存器,用来存放当前数据所在存储单元的偏移地址,在串操作指令中,SI用来存放源操作数地址的偏移量,称为源变址寄存器,DI用来存放目标操作数地址的偏移量,称为目标变址寄存器。
C.段寄存器:
CS,DS,SS,ES
D.指令指针:
IP:
IP的内容总是指向BIU将要取的下一条指令代码的16位偏移地址
E.标志寄存器:
FR:
16位只是用9位;
其中6位为状态标志位,用来反映算术运算或逻辑运算结果的状态;
3位控制位,用来控制CPU的操作。
六.8086CPU的读写操作的理解
七.Debug命令
D命令
功能:
显示数据段中指定单元或单元块的内容。
E命令
修改内存单元内容
命令A
进行程序段汇编
命令U
从代码段中指定的位置对机器代码进行反汇编,得到相应的助记符形式的指令。
命令R
R
R命令就用来显示所有寄存器内容,包括标志寄存器中的8个状态标志位的状态,并在最后提示下一条将要执行的指令。
RAX
R后面跟上一个寄存器的名称,这时R命令就用来显示这个寄存器的内容并等待修改。
RF
功能是显示和修改标志位状态。
命令G
运行程序
命令T
单步执行程序
八.逻辑地址与物理地址理解与计算
1.逻辑地址:
由段基址和偏移地址两部分构成,它们的是无符号16位二进制数;
逻辑地址是用户进行程序设计师采用的地址
2.物理地址:
CPU访问内存是使用的地址:
物理地址=段基址*16+偏移地址
九.数值转换
1._H=_D_D=_H_H=_B_D=_B
一十.负数的补码表示的计算
1.-B=B的反码+1
一十一.各段寄存器的理解和用途
1.CS:
代码段寄存器,用来存放当前使用的代码的段基址
2.DS:
数据寄存器,用来存放当前使用的数据段的段基址
3.ES:
附加段寄存器,用来存放当前使用的附加段的段基址
4.SS:
堆栈段寄存器,用来存放当期使用的堆栈段的段基址
一十二.堆栈及操作过
1.先进后出
2.入栈PUSHAX
PUSHBX
PUSHCX
PUSHF
出栈POPF
POPBX
POPAX
一十三.用一条逻辑指令将寄存器其他位清零,置1,取反
1.清零:
ANDd,0
2.置1:
ORd,1
3.取反:
XORd,1
一十四.指令的组成
1.[标号:
][前缀]助记符[操作数][;
注释]共四部分组成
一十五.DOS系统功能调用
1.1号功能:
键盘输入并显示
MOVAH,01H
INT21H
2.2号功能:
屏幕显示一个字符
MOVDL,‘字符’
MOVAH,02H
3.8号功能:
键盘输入但不显示输入字符
MOVAH,08H
4.9号功能:
屏幕显示字符串
MOVDX,字符串的偏移地址
MOVAH,09H
5.4CH功能:
返回DOS操作系统
MOVAH,4CH
一十六.BIOS调用
1.按任意键退出:
MOVAH,01H
INT16H
JNEEXIT
….
EXIT:
MOVAH,4CH
INT21H
一十七.奇存储体,偶寄存体
1.最后一位为奇则为奇存储体,偶则为偶存储体
一十八.子程序定义
1.定义:
过程名PROC属性(NEAR,FAR)
…
RET
过程名ENDP
2.调用:
CALL过程名
一十九.编程
二十.程序分析
二十一.I/O指令应用
1.IN:
输入指令:
IN累加器AX或AL,端口地址
INAL,08H
或MOVDX,2000H
INAX,DX
2.OUT:
输出指令:
OUT端口地址,累加器
OUT50H,AX
或MOVAL