云南大学软件学院 实验报告
课程: 学期: 2011-2012学年 第二 学期
任课教师: 李海 专业: 软件工程
学号: 姓名: 成绩:
2.1数据传送指令的使用
一、数据传送指令概述
负责把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从内存单元、I/O端口中读取数据。可以分为下面几类:
1. 通用传送指令: MOV,PUSH,POP,XCHG,XLAT
2. 输入输出指令指令: IN,OUT
3. 目的地址传送指令: LEA,LDS,LES
4. 标志位传送指令: LAHF,SAHF,PUSHF,POPF
注意:除 SAHF和POPF指令外,所有指令对标志寄存器没有影响。
二、数据传送指令详解
略
三、数据传送指令的有关说明
略
四、例题讲解
1. 使用数据传送指令,把标志寄存器中的OF标志清0其余位保持不变;
PUSHF ;把PSW中的内容传送到堆栈中
POP AX ;把PSW的内容从堆栈中弹出,传送到AX寄存器中
AND AX,0F7FF H ;把AX中第11位置0,其余位保持不变
PUSH AX ;把AX中内容压入堆栈
POPF ;把堆栈中内容弹出到PSW中
思考:采用SAHF和LAHF能否实现上面的功能,为什么?
答:能,实现上面的功能,由于标志寄存器中的OF标志位于11位,而CF位于0位,可先用LAHF 语句将标志寄存器中的低8位送入AH寄存器中,然后通过MOV DX,FFFFH ;AND DX,DX ;将标志寄存器中的OF和CF清零,最后用SAHF 语句将原先存在AH中的数据送回标致寄存器的低8位即可。
实现语句:
LAHF ;
MOV DX,FFFFH ;
AND DX,DX ;
SAHF ;
程序和实验结果截图如下:
2. 在当前数据段偏移地址为2000H开始的4个内存单元中,存放着某个内存空间的地址指针,高字存放段地址指针,低字存放偏移地址指针,试把该地址指针指向的内存空间的内容读出放入AX寄存器中。
MOV SI,2000H
MOV AX,[SI]
MOV BX,AX
MOV AX,[SI+2]
MOV DS,AX
MOV AX,[BX]
程序及其运行结果如下所示:
五、练习
1. 传送指令
1)用A命令在内存100H处键入下列内容:
MOV AX,1234
MOV BX,5678
XCHG AX,BX
MOV AH,35
MOV AL,48
MOV DX,75AB
XCHG AX,DX
用U命令检查键入的程序并
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
,特别注意左边的机器码。
如上图所示,用A命令输入指令完后,用U命令反汇编检查键入的程序正确。
用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。
如上图所示先输入R命令查看原先各寄存器及IP的情况,然后输入T命令执行MOV AX,1234语句,可见AX的值变为1234,IP的值变为103,各标志寄存器的值不变。
如上图所示输入T命令执行MOV BX,5678语句,看见BX的值变为5678,IP的值变为106,各标志寄存器的值不变。
如上图所示输入T命令执行XCHG AX,BX语句,看见AX的值变为5678,BX的值变为1234,IP的值变为108,各标志寄存器的值不变。
如上图所示输入T命令执行MOV AH,35语句,看见AX的值变为3578,IP的值变为10A,各标志寄存器的值不变。
如上图所示输入T命令执行MOV AL,48语句,看见BX的值变为3548,IP的值变为10C,各标志寄存器的值不变。
如上图所示输入T命令执行MOV DX,75AB语句,看见DX的值变为75AB,IP的值变为10F,各标志寄存器的值不变。
如上图所示输入T命令执行XCHG AX,DX语句,看见AX的值变为75AB,DX的值变为3548,IP的值变为111,各标志寄存器的值不变。
改变标志寄存器psw中AF标志的状态(0——1或1——0),其余位保持不变。
先输入R命令查看标志寄存器psw中AF标志的状态,如下所示原先AF的值为1
用A命令输入以下指令:
PUSHF ;把PSW中的内容传送到堆栈中
POP AX ;把PSW的内容从堆栈中弹出,传送到AX寄存器中
AND AX,FFEFH ;把AX中第5位置0,其余位保持不变
PUSH AX ;把AX中内容压入堆栈
POPF ;把堆栈中内容弹出到PSW中
然后用T命令执行输入的语句即可。执行结果如下:
3. 设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入 0AH,0BH,0CH,0DH,0EH。在DEBUG状态下使用A命令送入下面程序,并用单步T命令执行的方法,
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
每条指令源地址的形成过程?当数据 传送每完成一次,试分析AX寄存器中的内容是什么?
程序
清单
安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载
如下:
MOV AX,BX
MOV AX,0304H
MOV AX,[0304H]
MOV AX,[BX]
MOV AX,0001[BX]
MOV AX,[BX][SI]
HLT
如上图所示先用R命令将BX设为0300H,SI设为0002H
如上图所示先用E命令将存储器偏移地址300H~304H连续单元顺序装入 0AH,0BH,0CH,0DH,0EH,并用D命令查看该段连续单元的存储情况,经查看修改成功。
如上图所示使用A命令送入上面程序
如上图所示使用R命令查看原各寄存器中的情况,然后输入T命令执行MOV AX,BX语句,该条指令的源地址直接取寄存器BX,数据传送完成后,AX寄存器中的内容是300H。
如上图所示输入T命令执行MOV AX,0304H语句,由于该条指令是直接传送数据故不存在源地址,数据传送完成后,AX寄存器中的内容是304H。
如上图所示输入T命令执行MOV AX,[0304H]语句,该条指令的源地址的形成过程为CPU自动取ds中的数据做为源地址的段地址而[0304H]中的0304H作为源地址的偏移地址,数据传送完成后,AX寄存器中的内容是10EH。
如上图所示输入T命令执行MOV AX,[BX]语句,该条指令的源地址的形成过程为CPU自动取ds中的数据做为源地址的段地址而BX中的数据作为源地址的偏移地址,数据传送完成后,AX寄存器中的内容是B0AH。
如上图所示输入T命令执行MOV AX,0001[BX]语句,该条指令的源地址的形成过程为CPU自动取ds中的数据做为源地址的段地址而BX中的数据再加上1作为源地址的偏移地址,数据传送完成后,AX寄存器中的内容是C0BH。
如上图所示输入T命令执行MOV AX,[BX][SI]语句,该条指令的源地址的形成过程为CPU自动取ds中的数据做为源地址的段地址而BX中的数据再加上SI中的数据作为源地址的偏移地址,数据传送完成后,AX寄存器中的内容是D0CH。
如上图所示输入T命令执行HLT语句,该条指令不涉及源地址数据传送的问题,AX寄存器中的内容仍是D0CH。
使用标志位传送指令,编程序段将标志位寄存器的低八位的值存入内存单元DS:1000H中或堆栈中,然后将标志位寄存器的低八位置位为10101010。
程序及其运行结果如下所示: