配色: 字号:
第3章_2 数据传送
2012-05-16 | 阅:  转:  |  分享 
  
课后作业3.9~3.12第三章指令系统三峡大学陈慈发0717-6394358,13972597617chcf0415
@126.com128086CPU的指令格式8086CPU的指令系统38086CPU的寻址方式DEBUG程序“开
始”→“运行”→DEBUG[.com][.exe]“开始”→“运行”→CMD,…>DEBUG[.com][.ex
e]启动后显示命令提示符“-”,后接一闪烁光标,等待你输入命令DEBUG是DOS下汇编语言专用调试程序。可对.CO
M程序进行完全的调试保存,对.EXE程序只能调试不能保存。DEBUG的启动DEBUG启动后的状态CS、DS、ES、SS指
向自由空间的底部,具体值与操作系统有关。AX、BX、CX、DX、BP、SI、DI均为0000HIP为0100H,SP为0
FFEEHDEBUG中的所有数据均为16进制DEBUG的操作命令1、汇编命令A(Assembly)-A↙
-A地址↙ 2、反汇编命令U(Unassembly)-U↙当前地址CS:IP反汇编32字节指令
-U地址↙3、寄存器修改命令R(Register)-R↙-R寄存器名↙ 4、内存显示命令D(Dump
)-D↙-D地址↙显示连续128字节的内容段地址偏移量内存内容ASCII码5、内存修改命令E
-E地址↙-E地址内容表↙-E100f3"abc"8d↙-E110''A''↙-E1201020
304050''C''60"OK!"↙6、运行命令G(Go)-G↙-G地址↙-G100↙从CS:
IP=CS:100H开始执行7、跟踪命令T(Trace)-T↙-T=地址↙从当前CS:IP或指
定IP执行一条指令后暂停,遇到子程序调用或软中断指令则跟踪进入。8、单步命令P(Step)-P↙-P=地址
↙从当前CS:IP或指定IP执行一条指令后暂停,将子程序调用或软中断指令作为一条指令执行。9、文件命名命令N(Nam
e)-N文件名↙-Nexam1.com↙10、文件装入命令L(Load)-L↙11、将文件写入磁盘命令
W(Write)-W↙CX:文件长度的低16位BX:文件长度的高16位12、端口输入命令I(Input)-I
端口地址↙-I3F8↙13、端口输出命令O(Output)-O端口地址数据↙-O3F8AA↙1
4、退出DEBUG命令Q(Quit)-Q↙其它DEBUG命令及更详细的使用方法参见附录H指令系统操作码助记符操
作数助记符;注释标号:指令格式指令构成的基本原则源、目的操作数的字长一致源、目的操作数不能同为内存单元立即数不
能作目的操作数指令分类数据传送指令算术运算指令逻辑运算与移位指令串操作指令控制转移指令处理机控制指令数
据传送指令(14条)实现在寄存器、存储器及I/O端口之间传送数据除标志传送指令外,指令执行结果都不影响标志寄存器累加器←
(端口地址)(端口地址)←累加器IN累加器,端口地址OUT端口地址,累加器从I/O端口输入数据数据输出至I/O端
口输入输出(2条)AH←F的低8位AH→F的低8位SP←SP-2,(SP)←FF←(SP),SP←SP+2LAHF
SAHFPUSHFPOPF标志寄存器送AHAH送标志寄存器标志入栈标志出栈标志传送(4条)reg16←s的有效地
址reg16←(s)的偏移地址,DS←(s)的段地址reg16←(s)的偏移地址,ES←(s)的段地址LEAreg16,
sLDSreg16,sLESreg16,s取有效地址取逻辑地址(指针)取逻辑地址(指针)地址传送(3条)d
←sd←→sSP←SP-2,(SP)←sd←(SP),SP←SP+2AL←DS:[BX+AL]MOVd,sXCHG
d,sPUSHsPOPdXLAT传送交换压入堆栈弹出堆栈查表转换通用数据传送(5条)操作助记
符格式功能分类通用数据传送1、MOV指令格式:MOVd,s功能:(d)?(s)说明:将s的
内容传送给d,s保持不变内存立即数AH,ALBH,BLCH,CLDH,DLAX,BXCX,DXSI,DI
BP,SPCSDSSSES【例】 MOV AX,BX MOV AH,DL MOV CL,[SI] MOV DS
,SI MOV DI,[SI] MOV [DI],DH MOV CX,30H MOV BYTEPTR[SI],04
MOV [BX],CX MOV WORDPTR[DI],100H不影响标志位d不能是CS和立即数d、s不同为段寄存器和
存储器?MOVDS,ES立即数不能直接送段寄存器?MOVDS,2000HMOV
AX,ESMOVDS,AXMOVAX,2000HMOVDS,AX2、XCHG 指令格式:XCHG
d,s功能:(d)?(s)说明:交换s和d的内容,s和d的内容都变化内存AH,ALBH,BL
CH,CLDH,DLAX,BXCX,DXSI,DIBP,SP【例】 XCHG CL,[SI] XCHG CL,AL
XCHG [DI],DX XCHG BX,CX不影响标志位不允许使用立即数?XCHGAX,2000
H不允许使用段寄存器?XCHGCS,DXd、s不同为存储器?XCHG[SI],
[DI]进栈指令PUSH格式:PUSHs16功能:SP←SP-2,(SP)←s16说明:将s指定
的16位操作数压入堆栈3、堆栈操作指令PUSH和POP出栈指令POP格式:POPd16功能:d16←
(SP),SP←SP+2说明:将栈顶的16位操作数弹出,送入d堆栈是存储器中的特定区域,在堆栈中对数据采取特殊
的存取规则即“后进先出(LIFO或FILO)”。堆栈设在堆栈段中,段地址在段寄存器SS中。在堆栈中始终有一个栈顶单元,该单元的段内
偏移地址存放在堆栈指针寄存器SP中(初始值可以设置)。当压入数据时,数据被存放在栈顶上面的2个字节单元中,且SP自动减2以指向新的
栈顶;当弹出数据时是将栈顶的2个字节单元数据弹出至d,且SP自动加2又指向新的栈顶。总之,不管压入还是弹出总是对栈顶进行操作,且栈
顶指针SP会自动修改以保持始终指向新的栈顶。【例】设SS=8000H,SP=1000H,AX=1122H,BX=3344H,执
行以下指令:PUSH AXPUSH BXPOP AX不影响标志位不允许使用立即数?PUSH2
000H必须以字为单位?PUSHDL?POPAHd、s可以是16位通用寄存
器、存储器或段寄存器,但POP指令不能用CS?POPCS判断下列指令的对错:PUSH 12HPUS
H 1234HPOP [1000H]PUSH CSPOP CSPUSH CLPOP ESPUSH [SI]POP [
DX]PUSH ES:[10H]POP [BX][SI+08H]4、查表转换指令XLAT格式:XLAT
功能:AL←DS:[BX+AL]说明:将数据段中首单元偏移地址在BX,顺序号在AL的表的内容取出送AL。【例】七段L
ED数码管上显示数字0~9,可以将每个数字所对应的显示代码制成一张表,并按数字顺序存放在数据段中,假设表的首单元偏移地址为1000
H,如右图所示。现若要得到数字7的显示代码,执行如下指令:MOV BX,1000HMOV AL,7XLAT则AL中得到数
字7的显示代码78H。不影响标志位字节表格(长度不超过255)首地址?(BX)需转换代码?AL地址传
送5、取有效地址指令LEA(LoadEA)格式:LEAreg16,mem功能:reg16←memEA
说明:将mem指定的存储器操作数的有效地址取至16位的通用寄存器reg16中。【例】LEA AX,[201
2H] ;相当于 MOVAX,2012HLEA SI,[BX] ;相当于 MOVSI,BXL
EA DI,[BX+SI] ;无直接对应指令,DI?(BX+SI)LEA DX,[SI-0100H] ;DX?
(SI-0100H)不影响标志位reg16是16位通用寄存器,不能是段寄存器mem必须为存储器寻址方式6、取逻辑地址(
指针)指令LDS和LES格式:LDSreg16,mem功能:reg16←(mem),DS←(mem+2
)说明:将mem指定的存储器双字中存放的逻辑地址(指针)送16位通用寄存器reg16和DS。格式:LESr
eg16,mem功能:reg16←(mem),ES←(mem+2)说明:将mem指定的存储器双字中存放的逻辑地
址(指针)送16位通用寄存器reg16和ES。SI56H34H9AH2012HDS:10
00H2013H2014H2015H78H0000H……DS(ES)(DI)56H34H9AH78
H LDS SI,[2012H]操作: SI?(2013H:2012H) DS?(2015H:2014H) L
ES DI,[2012H]操作: DI?(2013H:2012H) ES?(2015H:2014H)标志传送7
、标志寄存器(PSW/FR)与AH之间的传送指令LAHF和SAHF格式:LAHF ;(LoadAHfromFlag
register)功能:AH←PSW7~0说明:将标志寄存器PSW的低8位传送到寄存器AH中。格式:S
AHF ;(SaveAHtoFlagregister)功能:PSW7~0←AH说明:将寄存器AH内容传送到
标志寄存器PSW的低8位中。LAHF不影响标志位,SAHF影响标志位8、标志寄存器进出栈指令PUSHF和POPF格式:
PUSHF ;(PUSHFlagregister)功能:SP←SP-2,(SP)←PSW说明:将标志寄存器
PSW压入堆栈,堆栈指针减2。格式:POPF ;(POPFlagregister)功能:PSW←(SP)
,SP←SP+2说明:将堆栈栈顶内容弹出至标志寄存器PSW,堆栈指针加2。PUSHF不影响标志位,POPF影响标志位输
入输出格式: INAL,port8 INAL,DX INAX,port8
INAX,DX功能:从I/O端口中读取一个或两个字节到CPU内的AL或AX寄存器。说明:port8是8
位端口地址,DX是16位端口地址,也可是8位端口地址。8位端口地址可直接在指令中出现,16位端口地址不能直接在指令中出现,必须事
先存放在DX寄存器中。AL是从端口中读取一个字节的数据,而AX是从端口的连续两个地址中分别读取一个字节共两个字节,存放到AX寄存器
中。9、端口输入指令IN(INputfromport)【例】IN AL,20H ;AL←(20H)
IN AX,40H ;AL←(40H),AH←(41H)MOV DX,03F8HIN AL,DX ;AL←
(3F8H)MOV DX,280H IN AX,DX ;AL←(280H),AH←(281H)不影响标
志位端口地址为00~FFH时,可直接在指令中指定,端口地址为100H~FFFFH时,必须放在DX中?IN
AL,400H只能传送到累加器(AL/AX)中?INCL,DX?IN
BX,30H格式: OUTport8,AL OUTDX,AL OUT
port8,AX OUTDX,AX功能:向I/O端口中输出一个或两个字节。10、端口输出指令OUT(OUTputtoport)【例】OUT 20H,AL ;(20H)←ALOUT 40H,AX ;(40H)←AL,(41H)←AHMOV DX,03F8HOUT DX,AL ;(3F8H)←ALMOV DX,280H OUT DX,AX ;(280H)←AL,(281H)←AH不影响标志位端口地址为00~FFH时,可直接在指令中指定,端口地址为100H~FFFFH时,必须放在DX中?OUT400H,AL只能从累加器(AL/AX)传送?OUTDX,CL?OUT30H,BX
献花(0)
+1
(本文系依米荷阳首藏)