汇编语言实验教材.docx
《汇编语言实验教材.docx》由会员分享,可在线阅读,更多相关《汇编语言实验教材.docx(44页珍藏版)》请在冰豆网上搜索。
汇编语言实验教材
第一部分指令系统
一、总体实验目的
学习掌握调试软件(DEBUG或TDEBUG)的基本使用方法。
掌握80X86的寻址方式
了解状态标志与控制标志的特点。
熟练掌握指令系统的基本操作
掌握DOS系统功能调用
掌握运算符及伪指令系统的基本操作
二、总体实验内容
将寻址方式、状态标志、指令系统及运算符与伪指令系统等内容分为几部分,对其分别进行调试与验证。
实验一寻址方式
已知:
(60000H)=12H,(60001H)=34H,(60002H)=56H,(60003H)=78H,(70000H)=0ABH,(70001H)=0CDH,(70002H)=0EFH,(70003H)=0DH。
分别执行下列指令后,填入指定寄存器的当前内容。
MOVAX,6000H
MOVDS,AX
MOVAX,7000H
MOVSS,AX
MOVBX,0
MOVBP,0
MOVSI,2
MOVAX,BX;AX=_______________
MOVAX,[0000H];AX=_______________
MOVAL,[0000H];AL=_______________
MOVAX,[BX];AX=_______________
MOVAL,[BX+1];AL=_______________
MOVAX,[BX+1];AX=_______________
MOVAL,[BX+2];AL=_______________
MOVAX,[BX+2];AX=_______________
MOVAX,[BX+SI];AX=_______________
MOVAX,[BP+SI];AX=_______________
按下列要求分别编写指令组,将BLOCK数组中的第六个子数据存放在DX寄存器中。
BLOCKDW1234H,5678H,’AB’,’CD’
寄存器间接寻址
寄存器相对寻址
基址加变址寻址
实验二标准寄存器
MOVAL,76H
ADDAX,0A6H
将操作码改为ADC、SUB、SBB,分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
ADD
ADC
SUB
SBB
1C
1C
D0
D0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
MOVAX,2376H
ADDAX,00A6H
将操作码改为ADC、SUB、SBB,分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
ADD
ADC
SUB
SBB
MOVAX,0A95BH
ADDAX,8CA2H
将操作码改为ADC、SUB、SBB,分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
ADD
ADC
SUB
SBB
MOVAX,8889H
ADDAX,7777H
将操作码改为ADC、SUB、SBB,分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
ADD
ADC
SUB
SBB
MOVAX,8765H
ANDAX,89ABH
将操作码改为OR、XOR、TEST分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
AND
OR
XOR
TEST
MOVAX,2736H
SHLAX,1
将操作码改为SHR、SAR分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
SHL
SHR
SAR
MOVAX,2736H
MOVCL,1
SHLAX,CL
将操作码改为SHR、SAR分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
SHL
SHR
SAR
CLC
MOVAX,0A95BH
ROLAX,1
将操作码改为ROR、RCL、RCR分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
ROL
ROR
RCL
RCR
STC
MOVAX,0A95BH
ROLAX,1
将操作码改为ROR、RCL、RCR分别执行后填表
操作码
AL
OF
SF
ZF
AF
PF
CF
ROL
ROR
RCL
RCR
实验三十进制加法运算指令
MOVAL,78H
ADDAL,26HAL=_______
DAAAL=_______CF=_______AF=_______
MOVAX,78H
ADDAX,26HAX=_______
DAAAX=_______CF=_______AF=_______
MOVAX,5678H
ADDAX,1224HAX=_______
DAAAX=_______CF=_______AF=_______
MOVAL,07H
ADDAL,09HAX=_______
DAAAX=_______CF=_______AF=_______
MOVAL,07H
ADDAL,09HAX=_______
AAAAX=_______CF=_______AF=_______
试将上述指令改为减法后,再填入指定的寄存器或标志位的值
实验四乘法运算指令
MOVAL,96H
MOVBL,12H
MULBLAX=_______CF=_______OF=_______
MOVAL,96H
MOVBL,12H
IMULBLAX=_______CF=_______OF=_______
MOVAX,916EH
MOVBX,18F2H
MULBXDX=_______AX=_______CF=_______OF=_______
MOVAL,07H
MOVBL,09H
MULBLAX=_______
AAMAX=_______CF=_______OF=_______
试将上述指令改为除法指令后,再填入指定的寄存器或标志位的值
实验五逻辑运算指令
ANDAX,AXAX=_______CF=_______ZF=_______
ORAX,AXAX=_______CF=_______ZF=_______
XORAX,AXAX=_______CF=_______ZF=_______
用一条逻辑指令使AX寄存器的高3位清0,其余位不变
_______________________________________________________________
用一条逻辑指令使BX寄存器的高3位置1,其余位不变
_______________________________________________________________
用一条逻辑指令使CX寄存器的高3位取反,其余位不变
______________________________________________________________
用一条逻辑指令测试DX寄存器的D3位
______________________________________________________________
用一条逻辑指令将AX中与BX中的不相同的位均置为1,其余位不变
_______________________________________________________________
实验六循环移位指令
MOVAL,56H
SHLAL,1AL=_______OF=____SF=____ZF=____PF_=___CF=____
MOVAL,56H
SHRAL,1AL=_______OF=____SF=____ZF=____PF_=___CF=____
MOVAL,87H
SHLAL,1AL=_______OF=____SF=____ZF=____PF_=___CF=____
MOVAL,87H
SHRAL,1AL=_______OF=____SF=____ZF=____PF_=___CF=____
MOVDX,0B9H
MOVCL,3
STC
()
在下面的括号中分别填入下列指令,程序段执行后填表
指令
DX的值
CF
SHRDX,1
SARDX,CL
SHLDX,CL
SHLDL,1
RORDX,CL
ROLDL,CL
SHLDH,1
RCLDX,CL
RCRDL,1
实验七串操作指令
程序段如下:
CLD
MOVAL,12H
MOVSI,2000H
MOVDI,3000H
()
在上述程序中的括号里分别填入下列指令。
REPMOVSB
REPLODSB
REPSTKSB
REPZSCASB
REPZCMPSB
试指出程序段分别完成什么动作
试用其他指令完成上述指令的功能
将REPZ改成REPNZ后结果如何改变
实验八程序控制类指令
在下列程序的括号中分别填入指令如下。
aLOOPL20
bLOOPZL20
cLOOPNZL20
试说明在三种情况下,程序执行后,AX,BX,CX,DX四个寄存器的内存,并填入表中。
XORAX,AX
MOVBX,2
MOVCX,4
MOVDX,3
L20:
INCAX
ADCBX,AX
SHRDX,1
()
HLT
指令
AX
BX
CX
DX
LOOPL20
LOOPZL20
LOOPNZL20
指令序列如下:
CMPAX,BX
JXXL1
请在能引起转移到L1单元的条件转移指令下面画勾,AX,BX的内容给定如下:
AX
BX
JB
JNB
JBE
JA
JL
JNL
JLE
JG
1F52H
1F52H
FF82H
007EH
58BAH
020EH
09A0H
1E97H
FF5CH
FF8BH
8AEAH
FC29H
实验九80386、80486增强与增加指令
数据传送指令
扩展传送指令MOVSX/MOVZX
设AX=1234H,BX=8765H
分别执行下列指令后,将32位寄存器ECX的内容填入表中:
指令
ECX
MOVSXECX,AX
MOVSXECX,BX
MOVZXECX,AX
MOVSXECX,BX
所有通用寄存器的内容进栈、弹栈指令PUSHA/POPA、PUSHAD/POPAD
试指出执行下列指令前后的SP值及进栈、弹栈了那些寄存器及其顺序。
指令
前SP后
寄存器及其顺序
PUSHA
POPA
PUSHAD
POPAD
字节交换指令BSWAP
MOVEAX,12345678HEAX=______________
BSWAPEAXEAX=______________
(2)算术运算类
交换加法指令XADD
设AX=1234H,BX=5678H
执行XADDAX,BX后AX=_____________BX=____________
试指出与ADD指令的不同点。
有符号数乘法指令IMUL
设AX=1234H,BX=5678H
执行IMULAX,BX,20H后AX=_____________BX=____________
实验十DOS系统功能调用
实验目的
掌握利用DOS/BIOS系统功能调用实现字符输入输出的方法。
实验原理
DOS功能调用是指中断类型号21H(INT21H)的调用。
功能调用是0~57H(称为DOS功能调用)。
INT21H功能调用分为字符输入、字符输出、磁盘控制、文件管理等种类。
本实验着重了解字符输入输出DOS功能调用。
常用的有键盘及显示(01H)、字符显示(功能号21H)、内存字符串输出(功能号09H)、无显示字符输入(功能07H)等。
实验内容
用01H号调用输入一个字符,用02H号调用显示输入的字符。
用0H调用的结束程序。
用DEBUG调试满足上述要求的程序。
MOVAH,01H
INT21H
MOVDL,AL
MOVAH,2
INT21H
MOVAH,0
INT21H
用DEBUG状态下用A命令输入上面程序,用G命令执行。
此时屏幕显示两个相同的字符,观察第一个是不是01H号调用输入后显示的,第二个是不是02H号调用后显示的。
用0AH号调用输入一个字符串,用09H号调用显示输入的字符串。
TABDB50,50DUP(‘$’)
LEADX,TAB
MOVAH,0AH
INT21H
LEADX,TAB
MOVAH,09H
INT21H
用DOS07H号调用和09H号调用实现密码输入和识别。
编程要求如下:
程序提示:
PleaseInputPassword:
由键盘输入密码。
若正确,提示OK;若不正确,提示Error。
密码由回车结束。
密码字符和全部信息在程序首部设置。
程序框图(见图1)
N
Y
图1程序框图
程序清单
CODESEGMENT
ORG100H
ASSUMECS:
CODE
START:
JMPPP
A1DB‘WORD’
N1EQU$-A1
A2DB‘OK$’
A3DB‘Error$’
A4DB‘PleaseInputPassword$’
A5DB10DUP(?
)
PP:
MOVAX,CS
MOVDS,AX
MOVES,AX
MOVSS,AX
LEADX,A4
MOVAH,9
INT21H
MOVDX,0
MOVDI,OFFSETA5
PA:
MOVAH,07H
INT21H
CMPAL,0DH
JZPB
INCDX
STOSB
LOOPPA
PB:
MOVCX,DX
JNZPC
LEASI,A1
LEADI,A5
REPZCMPSB
JNZPC
LEADX,A2
MOVAH,9
INT21H
JMPPD
PC:
LEADX,A3
MOVAH,9
INT21H
PD:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
实验十一运算符与伪指令系统
将下列语句分配的存储空间及初始化的数据值填入表中。
a.A1DB‘BYTE’,12,12H,2DUP(0,?
3DUP(1,2),?
)
b.A2DW4DUP(0,1,2),?
-5,’BY’,’TE’,256H
c.A3DWA1,$+6,A2-A1
A1
A2
A3
请总结DB、DW数据定义的特点。
对于下列的符号定义,分别指出下列指令的错误并改正
A1DB?
A2DB10
K1EQU1024
K2=256
a.MOVK1,AX
b.MOVA1,AX
c.MOVBX,A1
MOV[BX],100;将100送入A1单元
d.CMPA1,A2
e.K1EQU2048
对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
A1DB?
A2DW10DUP(?
)
A3DB10DUP(?
)
A4DB‘XYZ’,’123’
a.MOVAX,TYPEA1AX=_____________
b.MOVAX,TYPEA2AX=_____________
c.MOVAX,LENGTHA1AX=_____________
d.MOVAX,LENGTHA2AX=_____________
对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
A1DW?
A2DW10DUP(?
)
A3DB10DUP(?
)
A4DB‘XYZ’,’123’
a.MOVAX,TYPEA1AX=_____________
b.MOVAX,TYPEA2AX=_____________
c.MOVAX,LENGTHA1AX=____________
d.MOVAX,LENGTHA2AX=_____________
e.MOVAX,LENGTHA3AX=_____________
f.MOVAX,LENGTHA4AX=_____________
g.MOVAX,SIZEA2AX=_____________
h.MOVAX,SIZEA3AX=_____________
第二部分汇编语言程序设计
一、总体实验目的
熟悉如何在微机上进行编辑、汇编、链接、调试和运行汇编语言程序的过程。
掌握分支程序设计、循环程序设计、子程序设计的方法。
了解汇编语言与高级语言的接口。
二、程序框架
EXE文件的程序框架
程序框架中一般要定义一个数据段和一个代码段,根据需要还可以定义堆栈段和附加段。
通常指令放在代码段,变量放在数据段。
DATASEGMENT
在此加入数据定义
DATAEND
STACKSEGMENT
STADB20DUP(?
)
TOPEQU$-STA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSS,STACK
MOVAX,TOP
MOVSP,AX
在此加入指令段
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
COM文件的程序框架
程序框架中只有一个段并限制在64K之内,COM程序的堆栈由DOS自动产生,数据定义在代码段内,COM程序总是从偏移地址100H开始执行。
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,SS:
CODE,DS:
DATA
ORG100H
PUSHDS
XORAX,AX
PUSHAX
在此加入指令段或数据定义
RET
MAINENDP
CODEENDS
ENDMAIN
自动产生汇编语言程序框架
TurboC中提供了一个自动产生汇编语言框架的方法
实验一汇编语言程序的调试和运行
实验目的
学习数据传送和算术运算指令的用法
熟悉在PC机上编辑、汇编、链接、调试和运行汇编语言程序的过程
实验内容
将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DATA2为首的5个内存单元中,结果送回DATA1处。
程序框图
见图2
程序清单
DISPMACROX
MOVDL,X
MOVAH,02H
INT21H
ENDM
DATASEGMENT
DATA1DB‘12732’
DATA2DB‘06815’
NEQU$-DATA2
DATAENDS
STACKSEGMENTSTACK
STADB20DUP(?
)
TOPEQU$-STA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
LEASI,DATA1;#
MOVBX,0
MOVCX,N
CALLDISPL;显示被加数
DISP‘+’
LEASI,DATA2
MOVBX,0
MOVCX,N
CALLDISPL;显示加数
DISP‘=’
LEADI,DATA1
MOVCX,N
CALLADDA;调用加法子程序
LEASI,DATA1
MOVBX,0
MOVCX,N
CALLDISPL;显示运算结果
DISP0DH