首页 【计算机基础】数据传送指令(可编辑)

【计算机基础】数据传送指令(可编辑)

举报
开通vip

【计算机基础】数据传送指令(可编辑)【计算机基础】数据传送指令(可编辑) 【计算机基础】数据传送指令 二 .数据传送指令 地址总线 AB 输 输 I/O I/O 存 入 入 接 接 储 设 设 CPU 口 口 器 备 备 数据总线 DB 控制总线 CB 寄存器,存储器,I/O端口? 数据传送是最基本、最重要的一种操作实际程 序中,使用的比例最高 汇编子程例: changePROC LEASI,num+2 MOV CL, num+1 MOV CH, 0 寄存器 寄存器 MOV AX, 0 MOV ...

【计算机基础】数据传送指令(可编辑)
【计算机基础】数据传送指令(可编辑) 【计算机基础】数据传送指令 二 .数据传送指令 地址总线 AB 输 输 I/O I/O 存 入 入 接 接 储 设 设 CPU 口 口 器 备 备 数据总线 DB 控制总线 CB 寄存器,存储器,I/O端口? 数据传送是最基本、最重要的一种操作实际程 序中,使用的比例最高 汇编子程例: changePROC LEASI,num+2 MOV CL, num+1 MOV CH, 0 寄存器 寄存器 MOV AX, 0 MOV DI, 10 寄存器 内存单元 next:MUL DI MOV BH, 0 寄存器 I/O端口 MOV BL, [SI] AND BL, 0FH 设置寄存器、内存单元的初始值 ADD AX, BXINCSI LOOP next zero:MOV BX, AX RET changeENDP ? 按传送内容,可分为四类: 1. 通用数据传送 MOV, PUSH, POP, XCHG, XLAT 2. 地址传送 LEA, LDS, LES 3. 标志传送PUSHF, POPF, LAHF, SAHF 4. 输入输出传送 IN, OUT 在第五章介绍 ? 特点: 1. 除POPF、SAHF外,其他传送指令对标志位均无影响 2. 唯一允许以段寄存器做操作数的指令 且只有MOV、PUSH、POP这三条允许1. 通用传送指令 MOV、PUSH、POP、XCHG、XLAT 1)MOV传送指令 格式 MOV dst,src 执行 dst ? src reg/mem/segreg ? reg reg/segreg?mem可实现 reg/mem ?segreg reg/mem ?data例 :?reg/mem/segreg ? reg通用寄存器/存储器/段寄存器?通用寄存器MOV AL , BL MOV [ BX ] , AL MOV DS , AX ?reg/segreg ? mem通用寄存器/段寄存器 ? 存储器MOV AL , [ BX ] MOV DS , [ BX+SI ] ?reg/mem ?segreg通用寄存器/存储器 ? 段寄存器MOVBX , CSMOV[ BX ] , DS?reg/mem ?data 通用寄存器/存储器 ?立即数MOV Al , 9MOV BX , OFFSET bufferMOV [ value ] , 0 MOV WORD PTR [ BX ] , 1MOV指令特点及注意事项:双操作数指令 注意双操作指令的特点)可进行字节或字传送不允许存储器传送到存储器 MOV [ BX ] , value MOV [DI], [SI]MOV AX ,value MOV [ BX ] ,AX MOV AL ,[SI] MOV [ DI ] ,AL? 可对 DS、ES、SS 赋值 但不允许立即数直接传送给段寄 存器 MOVDS,AXMOVES ,[BX] MOVDS,1000HMOV AX ,1000H MOV DS,AXCS不能做目的操作数, 不能通过传送指令改变CS的值 MOV CS , AX? 不允许段寄存器传送到段寄存器 MOV ES ,DSMOV AX , DS MOV ES , AX D:\MASMDEBUG -A 1693:0100 MOVES, DS^ Error 1693:0100 MOVAX, DS 1693:8>0102 MOVES,AX 1693:0104 -2)PUSH入栈操作 格式 PUSHsrc SS:SP 执行 ( SP) ? (SP)- 2 src(SS:SP) ? (src)SS:SP 特点:单操作数指令操作数为16位,可以是reg/segreg/mem, 不可以是data reg : AX, BX, CX, DX, SI, DI, BP, BX segreg : CS, DS, ES, SS mem : 字类型例: PUSH AX 若执行前:则执行后: (SS) 2000H (SS) 2000H 不变 (SP) 1002H (SP) 1000H 减2 (SS:SP) 2010H (SS:SP) 1234H 变 不变 (AX) 1234H (AX) 1234H 地址 地址 低 低 SS:SP 34 2A 2000:1000 3B 12 SS:SP 10 10 2000:1002 20 20 高 高 AX1234h AX1234h 指令执行前 指令执行后例 利用DEBUG学习PUSH指令 D:\MASMDEBUG -A;汇编两条指令 1693:0100MOV AX, 1234 1693:0103PUSHAX 1693:0104 -R;显示指令执行前寄存器值 AX0000 BX0000 CX0000 DX0000 SPFFEE BP0000 SI0000 DI0000 DS1693 ES1693 SS1693 CS1693 IP0100NV UP EI PL NZ NA PO NC 1693:0100 B83412 MOV AX, 1234 -T1002 ;执行CS:100开始处的两条指令„. AX1234 BX0000 CX0000 DX0000 SPFFEC BP0000 SI0000 DI0000 DS1693 ES1693 SS1693 CS1693 IP0104NV UP EI PL NZ NA PO NC 1693:0104 03C6 ADD AX,SI -DSS:FFEC L10;查看栈顶内容 1693:FFE0 34 12 00 00 4 1693:FFF0 FF FF FF FF FF FF FF FF-FF FF FF FF -Q 注意相关寄存器和内存单元内容的变化3)POP出栈操作 格式POP dst SS:SP 执行(dst) ? (SS:SP) dst ( SP) ?( SP)+ 2SS:SP 特点: ?单操作数指令 ?操作数为16位,可以是reg/segreg/mem, 不可以是data reg : AX, BX, CX, DX, SI, DI, BP, BX segreg: DS, ES, SS, 不允许是CS mem: 字类型例: POP BX 若执行前:则执行后: 不变 (SS) 2000H (SS) 2000H 加2 (SP) 1000H (SP) 1002H 变 (SS:SP) 1234H (SS:SP) 2010H 变 (BX) 5678H (BX) 1234H 地址 地址 低 SS:SP 低 34 34 2000:1000 12 12 SS:SP 10 10 2000:1002 20 20 高 高 BX5678h BX1234h 指令执行前 指令执行后例在DEBUG下学习POP指令 -A 1693:0100 MOVBP, SP;取当前栈顶地址1693:0102 MOVWORD PTR [BP], 1234; 用MOV指令使栈顶内容为1234H 1693:0107 POP BX;出栈指令 1693:0108 -R ;查看指令执行前状态 AX0000 BX0000 CX0000 DX0000 SPFFEE BP0000 SI0000 DI0000 DS1693 ES1693 SS1693 CS1693 IP0100NV UP EI PL NZ NA PO NC 1693:0100 89E5 MOV BP, SP -T100 ;执行CS:100处的第一条mov指令 AX0000 BX0000 CX0000 DX0000 SPFFEE BPFFEE SI0000 DI0000 DS1693 ES1693 SS1693 CS1693 IP0102NV UP EI PL NZ NA PO NC 1693:0102 C746003412 MOV WORD PTR [BP+00], 1234 SS:FFEE0000 -T;执行下一条mov指令 AX0000 BX0000 CX0000 DX0000 SPFFEE BPFFEE SI0000 DI0000 DS1693 ES1693 SS1693 CS1693 IP0107NV UP EI PL NZ NA PO NC 1693:0107 5BPOP BX -T;执行pop指令,注意BX, SP的变化 AX0000 BX1234 CX0000 DX0000 SPFFF0 BPFFEE SI0000 DI0000 DS1693 ES1693 SS1693 CS1693 IP0108NV UP EI PL NZ NA PO NC 1693:0108 F5CMC -例:执行下列程序段 若执行前 PUSH AX? (SS) 3000H PUSH BX?(SP) 200EH MOV AX,66H ? (SS:SP) 1234H MOV BX,99H ? (AX) 0A0BH POP BX? (BX) 0C0DH POP AX? 执行 执行 ?? ??后 后 A AX X 0066 0066B BX X 0099 0099 执行 ??后 AX0066BX0099 执行 执行? ?后 后 0D 0D 0D 0D SS:SP SS:SP3000:200A 3000:200A 执行?后:B BX X 0C 0C0D 0D 0C 0C 0C 0C 0B 0B 0B 0B 0B SS:SP 执行?后 SS:SP 3000:200C 3000:200C 0A 0A 0A 0A 0A 执行?后:AX0A0B 34 执行前 SS:SP SS:SP 3000:200E 3000:200E 12 AX0A0BBX0C0D用PUSH往SS段传送一批数据后,再用POP取出时, 取出单元的顺序与存放时的顺序正好相反,“后进先出” ?MOV AX,0066 BX0099 ?MOV AX,0066 AX0066 SS:SP ?PUSH BX 0D 3000:200A ? POP BX BX0C0D 0C SS:SP 0B 3000:200C ?PUSH AX SS:SP 3000:200C 0A ? POP AX AX0A0B 34 执行前 SS:SP SS:SP 3000:200E 3000:200E 12 AX0A0BBX0C0D堆栈的概念 stack堆栈是一个内存区域。 通常用于存放一些重要数据, 如程序的地址、或是需要恢复的数据。 SS:SP为方便数据的存放和恢复, 设置专门的指针,指向堆栈中要操作的单元。 段值由 SS 给出,偏移地址由 SP 给出 SS ? 堆栈段寄存器 stack segment SP ? 堆栈指针寄存器 stack point? 堆栈操作指令 PUSH 和 POP, SS:0000 堆栈 对 SS 和 SP 指向的内存单元, 未用 空间 以“后进先出”方式进行操作。 SS:SP PUSH ? 入栈操作 SP减小 POP ? 出栈操作 SP增加 SP 指向栈顶,即堆栈的顶部, SS:FFFF编程员通过设置堆栈区域, 利用堆栈操作,可方便的进行数据的存放和恢复。堆栈使用的场合用堆栈保存恢复信息 如上例)子程序的调用、返回以及中断调用、返回(控制转移指令中介绍)用堆栈传送数据(程序设计中介绍) 注意事项堆栈是一重要数据结构,使用堆栈应有明确目的。不乱用堆栈操作,不乱修改堆栈内容。乱修改 SS 和 SP 的内容 包括 乱用BP参与的存储器操作数 PUSH、POP、PUSHF、POPF、 乱用指令 CALL、RET、INT、IRET? PUSH和POP 指令只能对字操作。PUSHALPOPBYTE PTR [BX]? 可以对段寄存器操作但POP不能对CS操作 PUSH DS PUSH CS POP ES POP CS 4)XCHG交换指令 格式 XCHG oprd1,oprd2 执行 oprd1 oprd2 regreg regmem可实现 memreg例XCHG AX, BX 字操作执行前(AX) 1122H (BX) 3344H执行后(AX) 3344H (BX) 1122H 例XCHG AH, BL 字节操作执行前(AX) 1122H (BX) 3344H执行后(AX) 4422H (BX) 3311HXCHG oprd1,oprd2 注意事项:双操作数指令 ?可进行字或字节操作 ?不允许对立即数、段寄存器做操作数 XCHGAX, 4 XCHGBX, DS 2. 地址传送指令LEA、LDS、LESLEA有效地址传送 格式 LEAreg, mem 执行(reg) ? mem的EA即寄存器 ? 存储器操作数的偏移地址 例 buffer是一个符号地址 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示的内存操作数变量。 LEA BX, buffer 内存 „ buffer 12h 34h 若变量buffer的偏移地址 1000H DS: 1000h 56h „ 执行后 BX 1000H 等价于 MOV BX ,OFFSET buffer 注意: OFFSET是汇编程序提供的一个操作符,不是CPU的指令例将buffer为首的4个字节内存内容相加,存放在AL中。MOV AX, SEGbufferMOV DS, AX 、、、LEA BX, buffer buffer 1AMOV CX, 4 2BMOVAL, 0exit: ADD AL, [BX] 3CINC BX 4DDEC CX;cx cx -1 、、、JNZ exit ;ZF ? 0, 转至exit 说明: 1 操作符SEG 的作用是取变量的段地址。 执行完前两条指令后,DSbuffer的段值2 操作符OFFSET的作用是取变量的偏移地址 执行完LEA BX, buffer, BX为buffer的偏移地址,3操作数 [BX]是以DS为段值,BX为偏移值的内存单元LEAreg, mem 特点及注意事项: ?目的操作数reg应是16位通用寄存器 LEA ES, [BX] LEA AL, buffer LEA 6, [BX+SI] LEA[DI], buffer 内存 „源操作数应是存储器操作数 buffer 12h LEA BX, AX 34h 56h传送的是内存单元的有效地址,与其内容无关。 „3. 标志传送 PUSHF、POPF、 LAHF、SAHF 1 PUSHF标志入栈 格式 PUSHF SS:SP PSW 执行 (SP) ? (SP)- 2 SS:SP(SS:SP) ? (PSW) 2 POPF标志出栈 格式 POPF SS:SP PSW 执行 (PSW)? (SS:SP) (SP) ? (SP)+ 2 SS:SP 特点及注意事项:无操作数的形式,操作数隐含为 PSW PUSHF AX POPF CXPUSHF和POPF用于标志信息的保存和恢复三. 算术运算指令 指令分类: 二进制运算 十进制调整 ADD, ADC, INC AAA, DAA 加 SUB, SBB, DEC, NEG, CMP AAS, DAS 减 MUL, IMUL AAM 乘 DIV, IDIV AAD 除 符号扩展指令: CBW、CWD特点:带符号数用补码表示 如MOV AX, -1等价于 MOV AX, 0FFFFh对加、减运算,不区分无符号数、带符号数 参见第一章例) 对乘、除运算,区分无符号数、带符号数可进行字节或字操作影响状态标志十进制运算方法 不做重点,讲义中做了简单介绍 当数据用压缩或非压缩BCD码表示时, 为使运算的结果仍为BCD码表示,需对结果进行调整。 十进制运算 二进制运算 + 十进制调整 BCD码( Binary Coded Decimal )用二进制编码表示十进制数。常用8421 BCD码, 与十进制数码对应关系: 0 1 2 3 4 十进制数码 0000 0001 0010 0011 0100 8421 BCD码 5 6 7 8 9 十进制数码 0101 0110 0111 1000 1001 8421 BCD码 例48的BCD码为 ( 0100 1000)BCD根据在内存的存放形式,分压缩BCD码 和非压缩 BCD码 1 压缩BCD码 一字节存放2个BCD码。 如 2148 的压缩BCD码为: 0010 0001 0100 1000 压缩BCD 在内存中占2字节 2 非压缩 BCD码 一字节存放1个BCD码。 如 2148 的非压缩BCD码为: 00000010 00000001 00000100 00001000 非压缩BCD 在内存中占4字节当数据用压缩或非压缩BCD码表示时, 为使运算的结果仍为BCD码表示,需对结果进行调整。 十进制运算 二进制 运算 + 十进制调整 例 0000 1000 + 0000 1001压缩BCD 压缩BCD 0001 0111 压缩BCD 计算机计算过程 看作压缩BCD 0000 1000 08 二进制运算 + 0000 1001 09 0001 0001 11 + 0000 0110 十进制调整 0001 0111 171. 加法运算指令 指令格式 执 行 操 作 ADD dst, src dst ? dst + src ADC dst, src dst ? dst + src + CF INCoprd oprd ? oprd + 1ADD、ADC为双操作数指令INC为单操作数指令 除INC指令不影响CF外,6个状态标志均据结果设置 OF DF IF TF SF ZF AF PF CF ?ADC带进位加法,实现字以上运算例1编程完成CFA1H + 62A0H(做过的随堂 作业 MOV DX,0CFA1H ADDDX,62A0H CFA1H 1100 1111 1010 0001 + 62A0H + 0110 0010 1010 0000 111 1 1 1 1111 1 3241H 0011 0010 0100 0001 执行后: (DX)3241HCF1,OF0,SF0, ZF0 (注意CF和OF的判断方法利用DEBUG学习加法指令 D:\MASM DEBUG -A ;汇编指令 1270:0100 MOV AX, CFA1 1270:0103 ADDAX, 62A0 1270:0106 -R ;执行前查看各寄存器内容 AX0000BX0000 CX0000 DX0000SPFFEE BP0000SI0000DI0000 DS1270 ES1270 SS1270 CS1270 IP0100NV UP EI PL NZ NA PO NC 1270:0100 B8A1CF MOV AX,CFA1 -T 2 ;执行汇编的两条指令, 并查看执行后的结果 „ AX3241 BX0000 CX0000 DX0000 SPFFEE BP0000 SI0000DI0000 DS1270 ES1270 SS1270 CS1270 IP0106NV UP EI PL NZ NA PE CY 1270:0106 57PUSH DI -对加、减运算,CPU计算时不区分无符号数、带符号数 第一章中的例题 F1 H MOV AL, 0F1H 二进制 +0C H 运 算 三组机器码相同: ADD AL, 0CH FD H 、、、 241 第一条 B0 MOV AL, 241 看 作 +12 指 令 F1 无符号数 ADD AL, 12 253 04 第二条 指 令 0C -15MOV AL, -15 、、、 看 作 + 12 带符号数 ADD AL, 12 -3 三组指令执行后的结果均为: AL0FDH,CF0, OF0, SF1, ZF0
本文档为【【计算机基础】数据传送指令(可编辑)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_983143
暂无简介~
格式:doc
大小:38KB
软件:Word
页数:17
分类:其他高等教育
上传时间:2017-11-12
浏览量:45