13271088 邢凤 debug.docx
- 文档编号:11121461
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:27
- 大小:380.33KB
13271088 邢凤 debug.docx
《13271088 邢凤 debug.docx》由会员分享,可在线阅读,更多相关《13271088 邢凤 debug.docx(27页珍藏版)》请在冰豆网上搜索。
13271088邢凤debug
《微机原理与接口技术》
课程研究性学习课题
用debug调试能完成一定功能的小程序
(至少20条汇编指令且助记符是不同的)
(视频解说先是对各种指令讲解,再是进行调试程序
一共选择了两个程序,第一个是数字在8086CPU内的各种变换,第二个是两个五位数相加的汇编程序)
姓名邢凤
学号13271088
班级通信1302
2015年10月7日
一.Window764位系统需要安装DOSbox才能正常使用debug.
二.debug常用命令集
三.DOS下的16位debug的标志位对应含义对照
四.指令系统
摘要:
80486的指令大致分为整数指令、浮点数指令、操作系统型指令,在这里我们主要研究整数指令。
通过在debug程序中对所学汇编指令分别进行测试以加深对指令系统的了解。
目录:
一、数据传送类指令2
1、数据传送指令2
2、数据交换指令(XCHG)3
3、堆栈操作指令(PUSH/POP)4
4、查表转换指令(XLAT)5
5、地址传送指令(LEA/LDS)6
6、标志位传位指令6
7、I/O数据传送指令(IN和OUT)7
二、算术运算类指令7
1、加法指令7
2、减法指令9
3、乘法指令11
4、除法指令(DIV/IDIV)12
5、BCD码运算调整指令13
6、符号扩展指令15
三、逻辑运算类指令16
1、逻辑运算指令16
2、移位指令17
感想:
19
一、数据传送类指令
数据传送类指令主要包括数据传送、数据交换、堆栈操作、查表转换、地址传送、标志位传送、I/O数据传送指令。
这类指令的主要特点是大部分指令操作完成后,对FR中的标志位不产生影响。
1、数据传送指令
指令格式:
MOVOP1,OP2
reg/Sreg,reg
reg,Sreg
reg/Sreg,mem
mem,reg/Sreg
reg,imm
mem,imm
功能:
把OP2的内容传送到OP1中,OP1和OP2为字节、字或双字。
例如:
MOVCL,05
MOVAX,1111
说明:
(1)立即数只能作为源操作数,而其他三种既可作源操作数又可作目的操作数;
如:
MOV45,AL错
A
(2)存储器和存储器之间以及段寄存器和段寄存器之间不允许传数,而通用寄存器之间则允许相互传数。
如:
MOVDS,ES错
(3)立即数不能直接传送到段寄存器。
如:
MOVDS,1000错
可改正为:
MOVAX,1000
MOVDS,AX
(4)源操作数和目标操作数类型要匹配。
如:
MOVAX,BL错
(5)段寄存器CS只能作源操作数,不能作为目标操作数。
如:
MOVCS,1000错
2、数据交换指令(XCHG)
指令格式:
XCHGOP1,OP2
reg,reg
mem,reg
reg,mem
功能:
用于交换两个操作数。
例如:
XCHGAX,BX
XCHG[DI],CL;数据A段(DS)*10H+(DI)中的数与CL交换。
说明:
(1)源操作数和目标操作数寻址可以是通用寄存器和存储器,不能是立即数。
如:
XCHGAX,1000错
(2)存储器之间不能直接进行数据交换
如:
XCHG[2000],[1000]错
3、堆栈操作指令(PUSH/POP)
指令格式:
PUSHOP1POPOP1
imm16mem16
imm32mem32
mem16reg16
mem32reg32
reg16
reg32
功能:
PUSH指令使(E)SP的内容减2或减4,然后把16位或32位的立即数、存储器操作数或寄存器操作数压入堆栈,SS:
[(E)SP]指向新的栈顶。
POP指令从堆栈把字或双字弹出至16位或32位存储器或通用寄存器中,(E)SP的内容加2或加4。
例如:
PUSHAX;(SP)-2→SP,(AX)→(SP)
POPAX;((SP))→AX,(SP)+2→SP
注:
堆栈为“先进后出”的数据结构。
全部通用寄存器压栈和出栈指令
指令格式及功能:
PUSHA/POPA;16位通用寄存器压栈和出栈指令。
入栈顺序为:
AX、CX、BX、DX、SP、BP、SI和DI。
PUSHAD/POPAD;32位通用寄存器压栈和出栈指令。
入栈顺序为:
EAX、ECX、EBX、EDX、
ESP、EBP、ESI和EDI。
其中:
SP和ESP为操作前的栈顶指针。
4、查表转换指令(XLAT)
格式:
XLAT;AL←((BX)+(AL))
功能:
完成一个字节的查表转换BX指向表的首地址(DS段内),AL装入要转换的代码在表中的序号,并XLAT指令执行的结果存于AL中。
例如:
查找ASCII码表中,3的ASCII码
LEABX,TABLE;DS段表的首地址送BX
MOVAL,3;要转换的代码在表中的序号3送AL
XLAT;AL←((BX)+(AL)),查找到的3的ASCII码33H保存在AL中
5、地址传送指令(LEA/LDS)
(1)有效地址传送指令(LEA)
指令格式:
LEAOp1,OP2
reg32,mem
reg16,mem
功能:
将有效地址(即偏移地址)送通用寄存器。
例如:
LEABX,[SI+1050]
(BX)=EA=(SI)+1050
(2)目标地址传送指令(LDS,LES,LFS.LGS,LSS)
指令格式:
LDSreg,mem
LESreg,mem
LFSreg,mem
LGSreg,mem
LSSreg,mem
功能:
取mem指示的32位或48位全地址指针(即一个16位段选择符和一个16位或32位偏移地址)装入段寄存器和16位或32位reg中。
6、标志位传位指令
指令格式:
LAHF;F寄存器内容送AH指令
SAHF;AH内容送F寄存器指令
PUSHF;16位F内容进栈指令(保存F)
POPF;16位F内容出栈指令(恢复F)
PUSHFD;32位F内容进栈指令(保存F)
POPFD;32位F内容出栈指令(恢复F)
注:
LAHF、SAHF、PUSHF、POPF、PUSHFD、POPFD的指令格式中只有操作码,操作数是隐含约定的。
7、I/O数据传送指令(IN和OUT)
指令格式:
INOP1,OP2OUTOP1,OP2
AL,imm8imm8,AL
AX,imm8imm8,AX
EAX,imm8imm8,EAX
AL,DXDX,AL
AX,DXDX,AX
EAX,DXDX,EAX
功能:
用于在I/O端口和AL、AX或EAX累加器之间交换数据。
注:
在I/O端口直接和间接寻址I/O指令中,端口地址和DX不允许加“[]”,如INAL,,[28]和INAL,[DX]指令格式是错误的。
二、算术运算类指令
支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的有符号和无符号二进制整数,也可以是无符号的压缩、非压缩BCD码。
算术运算指令一般会影响FLAGS寄存器中的状态标志。
1、加法指令
(1)不带进位的加法指令
指令格式:
ADDOP1,OP2;OP1←OP1+OP2,置标志位
reg,reg
reg,mem
reg,imm
mem,reg
mem,imm
例如:
ADDAX,BX;AX←(AX)+(BX)
ADDAL,[DI];[DI]中存储单元的数与AL相加,结果存入AL
(2)带进位的加法指令
指令格式:
ADCdst,src
功能:
源操作数和目标操作数的和与进位标志CF相加,结果送至目标单元。
MOVAX,0002
MOVBX,FFFE
ADCAX,BX
(3)加1指令
指令格式:
INCdes
功能:
目标操作数加1,结果送至目标单元。
例如:
INCAX;(AL)+1,结果存入AL
2、减法指令
(1)不带进位的减法指令
指令格式:
SUBdst,src
功能:
目标操作数减去源操作数,结果送至目标单元。
SUBAL,10;(AL)-20,结果送至AL
SUBBX,AX;(BX)-(AX),结果送BX
(2)带进位的减法指令
指令格式:
SBBdst,src
功能:
目标操作数减去源操作数再减去借位标志CF,结果送至目标单元。
例如:
MOVAX,0000
MOVBX,0001
SBBAX,BX
(3)减1指令
指令格式:
DECdst
功能:
目标操作数减1,结果送至目标单元
例如:
MOVAX,0002
DECAX
(4)求补指令
指令格式:
DECdst
功能:
0减目标操作数,结果送至目标单元。
例如:
MOVAX,0001
NEGAX
(5)比较指令
指令格式:
CMPOP1,OP2;OP1-OP2,置标志位
reg,reg
reg,mem
reg,imm
mem,reg
mem,imm
功能:
将OP1减去OP2,但结果不存在OP1中,只使结果影响标志位。
CMP指令用于比较OP1与OP2的大小,由标志位来反映两数的关系。
例如:
CMPBX,CX
CMPCX,BX
源操作数大于目标操作数时,CF为1(CY)
源操作数小于目标操作数时,CF为0(NC)
3、乘法指令
(1)无符号数乘法指令(MUL)
指令格式:
MULOP1
reg
mem
功能:
被乘数隐含在累加器中(AL,AX,EAX),OP1为乘数。
字节运算时乘积返回到AX;字运算时乘积返回到DX:
AX;双字运算时乘积返回到EDX:
EAX。
例如:
MOVAX,3
MOVBX,2
MULBX
(2)有符号乘法指令(IMUL)
指针格式:
IMULOP1
reg
mem
功能:
被乘数隐含在累加器中(AL,AX,EAX),OP1为乘数。
字节运算时乘积返回到AX;字运算时乘积返回到DX:
AX;双字运算时乘积返回到EDX:
EAX。
例如:
MOVAX,3
MOVBX,-2
IMULBX
4、除法指令(DIV/IDIV)
指令格式:
DIVOP1;无符号除法
reg
mem
IDIVOP1;有符号除法
reg
mem
功能:
字节运算时,被除数隐含在AX中,OP1为字节除数,商存入AL,余数存入AH。
字运算时,被除数隐含在DX:
AX中,OP1为字除数,商存入AX,余数存入DX双字运算时,被除数隐含在EDX:
EAX中,OP1为双字除数,商存入EAX,余数存入EDX。
例如:
MOVAX,0005
MOVBX,0003
DIVBL
5、BCD码运算调整指令
(1)压缩BCD码运算:
将压缩BCD数用二进制加、减指令(ADD,SUB,ADC,SBC)运算,运算结果必须用以下调整指令调整为压缩BCD数的结果。
指令格式及功能:
DAA;将AL中的和调整为压缩BCD数
DAS;将AL中的差调整为压缩BCD数
例如:
MOVAX,34
MOVBX,28
ADDAL,BL
DAA
(2)非压缩BCD码运算:
将非压缩BCD数用二进制加、减、乘、除指令运算,配合相应的调整。
指令格式及功能:
AAA;将AL中的和调整为非压缩BCD数
AAS;将AL中的差调整为非压缩BCD数
AAM;将AL中的积调整为非压缩BCD数
AAD;调整AX中的被除数,相除的商即为非压缩BCD数
例如:
MOVAX,8
MOVBX,7
ADDAX,BX
AAA
MOVAX,4
MOVBX,6
MULBX
AAM
MOVAX,0204
MOVBX,6
AAD
DIVBL
6、符号扩展指令
指令格式及功能:
CBW;将AL中8位带符号数扩展为16位存入AX。
CWD;将AX中16位带符号数扩展为32位存入DX:
AX
例如:
MOVAX,0091
CBW
MOVAX,9111
CWD
三、逻辑运算类指令
1、逻辑运算指令
这类指令包括与、或、非、异或、测试和左移、右移、循环左/右移指令。
除NOT外,都影响某些标志位。
逻辑与/或/异或指令AND/OR/XOR
指令格式:
AND/OR/XOROP1,OP2
reg,mem
reg,imm
mem,reg56
mem,imm
功能:
两操作数按位与、或、异或,结果存入OP1中。
MOVAL,12
ANDAL,0F;与运算
MOVAL,2
ORAL,10;或运算
MOVAL,F0
XORAL,AL;抑或运算;
MOVAL,0F
NOTAL;取反运算
MOVAL,8F
TESTAL,80;测试运算,与运算后置相应标志位
2、移位指令
(1)算术/逻辑左移指令SAL/SHL
指令格式:
SAL/SHLOP1,OP2
reg,imm8
mem,imm8
reg,CL
mem,CL
功能:
将OP1向左移位,移动的次数由OP2决定,若移动的次数为1,OP2为立即数,其它情况将移动的次数送入CL中。
操作数每左移一位,在最低位补0,最高位移进CF中。
MOVAX,00FF
MOVCL,3
SHLAX,CL
(2)算术/逻辑右移指令SAR/SHR
指令格式:
SAR/SHROP1,OP2
reg,imm8
mem,imm8
reg,CL
mem,CL
功能:
将OP1向右移位,移动的次数由OP2决定,若移动的次数为1,OP2为立即数,其它情况将移动的次数送入CL中。
例如:
MOVAX,8FFF
SHRAX,1
对于SHR指令,操作数为无符号数,每右移一位,在最高位补0,最低位移进CF中。
MOVAX,8FFF
SARAX,1
对于SAR指令,操作数为有符号数,每右移一位,最高位保持不变,最低位移进CF中。
(3)循环移位指令ROL/ROR/RCL/RCR
格式:
ROL/ROR/RCL/RCROP1,OP2
reg,imm8
mem,imm8
reg,CL
mem,CL
功能:
ROL为左循环移位指令,ROR为右循环移位指令,RCL和RCR则分别为带CF的左循环移位和右循环移位指令。
例如:
MOVAX.8000
ROLAX,1
MOVAX,0001
RCLAX,1
调试程序代码:
DATASSEGMENT
num1db'3','2','4','5','0';被加数
num2db'2','6','7','1','0';加数
sdb'5423+1762=$';显示的公式形式,$表示输出结束
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
DATAS
START:
MOVAX,DATAS
MOVDS,AX;DS指向数据段
movES,AX;ES指向数据段
movcx,5;5次循环
leadx,s;要显示的字符串的首偏移地址
movah,9h;9号DOS功能调用显示字符串s
int21h
movsi,offsetnum1;si指向num1首地址
movdi,offsetnum2;di指向num2首地址
clc;清零进位寄存器CF
adds:
LODSB
adcal,[di];有符号加法
aaa;调整ASCII码加法结果指令
stosb;所得结果以字节为单位存储到数据段di指向的位置,di+1
loopadds;循环知道cx为零,cx-1
movah,02h;以下为输出加法结果
movcx,5;共有5位数循环5次
adjust:
movdl,[di-1]
ordl,30h;二进制数转换成其相应ASCII码
decdi;输出下一位
int21h
loopadjust
MOVAH,4CH
INT21H;21号功能调用程序退出
CODESENDS
ENDSTART
程序运行截图
感想:
这次研究性学习,我付出了很多,戴老师说至少七个小时,我用了好久好久,不过恰好是国庆假期,而且我们不止要调指令,还要调程序,但也着实收获了很多东西。
经过在word上总结指令类型以及在视频中演示,我对书中所讲的指令系统有了更加深刻的理解,对这些指令有了更深的记忆。
对各种软件的使用也更加了解,最开始用了好多时间在调用程序上,下载了MASM软件编译才可以调试程序,录制的时候失败了好多次,不过收获真的很多很多,理论只有应用到实践当中才可以更好的掌握我们所学的知识,希望在今后的学习中可以更好掌握这些知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13271088 邢凤 debug