环保网站模板代码,58同城网站建设推广排名,东莞网络排名优化价格,网页设计与网站建设中的热点博主联系方式#xff1a; QQ:1540984562 QQ交流群#xff1a;892023501 群里会有往届的smarters和电赛选手#xff0c;群里也会不时分享一些有用的资料#xff0c;有问题可以在群里多问问。 【没事儿可以到我主页看看】https://blog.csdn.net/qq_42604176 传送类指令1… 博主联系方式 QQ:1540984562 QQ交流群892023501 群里会有往届的smarters和电赛选手群里也会不时分享一些有用的资料有问题可以在群里多问问。 【没事儿可以到我主页看看】https://blog.csdn.net/qq_42604176
传送类指令1通用传送类指令MOV指令MOV例题讲解:2取有效指令LEA指令:LEA例题讲解:3取地址指针指令:LDS、LESLDS例题讲解:LES例题讲解:4标志传送指令:LAHF、SAHF5数据交换指令:XCHG6字节转换指令:XLAT7堆栈操作指令:PUSH、POP、PUSHF、POPF栈操作例题讲解:功能把数据、地址、或立即数传送到寄存器或存储单元中 。
1通用传送类指令MOV指令
MOV指令的格式为 MOV DST SRC MOV指令的实质是把SRC的内容复制到DST中执行操作后 SRC的内容不变
语法格式MOV reg/mem/seg reg/mem/seg/immReg:寄存器,mem:存储器,seg:段寄存器imm立即数 对标志位的影响除标志寄存器传送指令外均不影响标志位
当无法通过任一个操作数确定是操作类型时需要利用汇编语言的操作符显式指明 MOV [BXSI], 255 非法指令修正 MOV BYTE PTR [BXSI],255BYTE PTR说明是字节操作 MOV WORD PTR [BXSI],255WORD PTR说明是字操作
MOV例题讲解:
问将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中若AREA1和AREA2都在当前数据段中可以用带有循环控制的数据传送程序来实现。
MOV SI,OFFSETAREA1;OFFSET是取地址
MOV DI,OFFSETAREA2; 偏移量必须加上
;SI DI作为指针指向两个内存的首地址
MOV CX,100; 循环次数为100
AGAINMOV AL,SI;RD为低MOV DI,AL ;WR为低 通过中间寄存器将SI指向的内容转移到DI指向的空间INC SI INC DI ;指针自加1DEC CX ;计数器减1JNZ AGAIN ;结果不为0转移 等效于LOOP有关寻址方式的一些语法要求请看这里
2取有效指令LEA指令:
指令格式 LEA reg16 存储器寻址方式/地址标号 将源操作数指向的偏移地址送入寄存器中
LEA BX,[BXSI0F62H]
如指令执行前
BX0400HSI003CH
则指令执行后
BX0400H003CH 0F62H139EH;139EH是偏移地址不是DS:139EH中的内容!LEA 指令与MOV 指令的区别 LEA SIBUFF将标号BUFF的偏移地址送入寄存器中 MOV SIBUFF将标号BUFF所指存储单元的内容送入SI
LEA例题讲解:
问如指令执行前SI3000HBX0400HMEEM12000HDS1000H执行LEA BXMEEM指令后BX的内容为 BX存储的是MEEM的偏移地址BXMEEM-DS*16H2000H 问执行LEA BXSI指令后BX的内容为 BX存储的是SI的偏移地址所以BXSI3000H 3取地址指针指令:LDS、LES
LDS指令 指针送寄存器和DS 指令格式LDS reg16 存储器寻址方式 语法格式LDS reg16 reg16/mem/lable 指令功能:从src指定的存储单元开始由4个连续存储单元中取出前2字节送到reg取出后2字节送到DS中
LDS例题讲解:
问LDS AXSI 20 20050H1234H20052H5678HAX0000HDS2000HSI0030H 执行的结果为AXDS src存储单元地址DS*16H SI 20H 200000030002020050 AX(20050)1234H; DS(200502)5678H; 问已知指令执行前22000H22005H12H、34H56H、78H9AH、BCHAX0000HDS2000HBX2000HMEEM22002H执行指令LDS AXMEEM和执行指令LDS AXBX LES指令 指针送寄存器和ES 指令格式LES reg16 存储器寻址方式 语法格式 LES reg16 reg16/mem/lable 指令功能从src指定的存储单元开始由4个连续存储单元中取出前2字节送到reg取出后2字节送到ES中
LES例题讲解:
问LES AX20SI或 LES AXSI 20 假设执行前为20050H1234H20052H5678HAX0000HDS2000HSI0030H 执行的结果为AXES 物理地址200200030H20050H AX(20050H)1234H ES(200502H)5678H 4标志传送指令:LAHF、SAHF 5数据交换指令:XCHG
执行的操作:交换DST与SRC的内容 DST SRC 语法格式为 XCHG reg/memreg/mem 注意点这种交换只能在通用寄存器之间、通用寄存器与存贮器之间进行存储器与存储器之间不能交换段寄存器不能作为一个操作数。 例XCHG BX [BPSI] 如指令执行前BX6F30HBP0200H2F246H54H 2F247H51H SI0046HSS2F00H2F00H4254HOPR2的物理地址2F00×16020000462F246H 则指令执行后BX5154H2F246H6F30H。 6字节转换指令:XLAT 7堆栈操作指令:PUSH、POP、PUSHF、POPF
堆栈概念–存储器的一段区域按“先进后出”的原则进行存取操作。8086/8088系统堆栈位于堆栈段其段地址由SS指示SP寄存器作为指针SP内容始终指向栈顶所在存储单元。 堆栈是一块特殊的存储区域利用这块区域可以存储返回地址等信息从而实现子程序的嵌套调用。 作用在调用一个过程时保存返回地址暂时存放寄存器或存储器单元操作数的内容。 PUSH: 指令格式进栈 PUSH SRC (堆栈压入指令进栈指令) 操作SP SP-2 指针-2 SP1SP SRC 把操作数压入栈中 功能将16位寄存器段寄存器16位存储单元数据压入堆栈。 POP: 指令格式 出栈 POP DST 操作DST SP1SP SP SP2 过程: 压栈和出栈的流程
MOV AX8000H
MOV SSAX 设堆栈段地址 SS8000H
MOV SP2000H 设堆栈指针
MOV DX3E4AH
PUSH DX 先进 DX内容存入SS×161FFEHSP-2
PUSH AX AX内容存入SS×161FFCH SP-2-2
PUSH 2000H取数据段 DS×162000H内容进栈存入SS×161FFAH SP-2-2-2 POP 2000H SS×161FFAH到DS×162000H
POP AX SS×161FFCH到AX
POP DX 后出 SS×161FFEH到DXPUSHF和POPF
栈操作例题讲解:
1、交换DS 和 ES的内容
PUSH DS;
PUSH ES;
POP DS;
POP ES;2、在子程序设计时需要从子程序返回时保持通用寄存器不变这时候可以利用堆栈把寄存器保护起来
PUSH AX;
PUSH BX;
PUSH CX;
PUSH DX;
//调用子程序;
//子程序返回;
POP DX;
POP CX;
POP BX;
POP AX;注意事项 PUSH操作使栈顶向低地址方向移动而POP操作则刚好相反 ·堆栈操作只能作字操作 ·SSSP在任何时候都指向当前的栈顶 【没事儿可以到我主页看看】https://blog.csdn.net/qq_42604176