组成与汇编实验指导书(5)

2018-11-18 21:38

计算机组成原理与汇编语言实验指导书

- 1 -

计算机组成原理与汇编语言实验指导书

第二章 80X86指令系统 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. 通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数指令。用于在内存单元、寄存器、立即数之间进行数据传送。 ★ MOV 传送指令

格式:MOV dest,src

功能:把一个字节(B)或一个字(W)由源操作数src传送至目的操作数dest。 说明:

(1) 不能直接在两个内存单元之间进行数据传递;

MOV MEM2, MEM1

;错

MOV AX, MEM1 ;对 MOV MEM2, AX

(2) 立即数不能直接送入段寄存器中;

MOV DS, 2000 MOV AX, 2000

;错 ;对

MOV DS, AX

(3) 不能直接在段寄存器之间的传送数据;

MOV ES, DS MOV AX, DS

;错 ;对

MOV ES, AX

(4) CS和IP不能作为目标操作数,可以作为源操作数;

MOV CS,AX ;错

MOV AX,CS MOV IP, AX MOV AX,IP

★ PUSH入栈指令 格式:PUSH src

功能:把一个字从源操作数src压入由SP指向堆栈顶部。同时SP=SP-2。

- 2 -

;对 ;错 ;错

计算机组成原理与汇编语言实验指导书

说明:

(1) PUSH入栈指令可以使用的源操作数src有:寄存器(通用寄存器,地址指

针,变址寄存器,段寄存器,存储器。

PUSH PUSH

CS IP

; 可以,但是实际不要使用 ;错

(2) PUSH的操作数必须为一个字。字的低字节压入堆栈的低地址,高字节压入

堆栈的高地址中;

PUSH AX ;把寄存器AL和AH中内容分别放在SP和SP+1指向的堆栈空间中。

★ POP出栈指令 格式:POP dest

功能:把当前SP所指向堆栈顶部的一个字弹出送入指定的目的操作数,同时SP=SP+2。 说明:

(1) POP出栈指令可以使用的目的操作数dest有:寄存器(通用寄存器,地址

指针,变址寄存器,段寄存器CS除外),存储器。

POP

CS

;可以,但是实际不要使用

POP IP ;错

(2) POP的操作数必须为一个字。堆栈弹出的低地址内容放入操作数的低字节,

高地址内容放入操作数高字节中; POP AX ;把SP和SP+1指向的堆栈空间中内容弹出放到寄存器AL和AH中。

★ XCHG 交换指令

格式:XCHG dest , src

功能:把一个字节或一个字的源操作数与目的操作数进行交换。 说明:

(1) 寄存器之间、寄存器和存储器之间进行交换,不能在两个存储器之间进行交

换,两个操作数中必须有一个为寄存器操作数;

XCHG BL, DL ;对

XCHG AX, SI ;对 XCHG COUNT[DI], AX ;对

(2) 段寄存器不能作为一个操作数;

XCHG [BX],[DI] XCHG DS, AX

★ XLAT 换码指令

格式:XLAT str_table

;错 ;错

或 XLAT

功能:把DS: (BX+AL)内存单元中的内容取出送入AL寄存器中。 说明:

(1)XLAT指令使用方法:

? 先建立一个字节表格;

- 3 -

计算机组成原理与汇编语言实验指导书

? 表格第一个字节偏移地址存入str_table送入BX寄存器;

? 需要转换代码的序号(相对于表格首地址位移量)存入AL;(表中第一个

元素的序号为0) ? 执行XLAT指令后,表中指定序号的元素存于AL中。(AL)为转换的代码。 (2)默认寄存器:

? BX:存放表格第一个字节偏移地址

? AL:使用XLAT指令前,存放相对于表格首字节的位移偏移量;使用XLAT

指令后,存放表格中指定的字节的内容; (3)内存的数据段中有一十六进制数字的ASCII码表。首地址为:Hex_table ,欲查

出元素?A‘的ASCII码;

MOV BX,OFFSET Hex_table MOV AL,0AH

XLAT Hex_table

程序运行后,AL寄存器中的内容为41H。

2. 输入输出指令用于在寄存器和外设端口之间进行数据交换,无论接受还是发送数据,必须通过累加器AX(字)或AL(字节),又称累加器专用传送指令。输入输出指令有两种使用格式:长格式和短格式。若需要访问的端口号小于256,则端口号可以以立即数形式写在指令中,此格式称为长格式;若需要访问的端口号大于等于256,则端口号应先放在DX寄存器中,此格式称为短格式。 ★ IN 输入指令

格式: IN AL, data8

IN AL, DX IN AX, DX

;端口地址8位,输入一个字节 ;端口地址8位,输入一个字

IN AX, data8

;端口地址16位,输入一个字节 ;端口地址16位,输入一个字

功能:用于CPU从外设端口接受数据。 说明: (1) (2)

一个端口号只能存放一个字节数据;一个字数据应存放在2个端口中,高地址端口存放高位字节,底地址端口存放低为位字节;

把(29H)(28H)端口中数据(字数据,29H中是高8位)送入字变量(DATA_WORD)中。 IN AX,28H MOV DATA_WORD,AX

★ OUT 输出指令

格式: OUT data8, AL ; 端口地址8位,输出一个字节

OUT data8, AX ;端口地址8位,输出一个字 OUT DX, AL ;端口地址16位,输出一个字节

AX ;端口地址16位,输出一个字

OUT DX,

功能:用于CPU向外设端口发送数据。

说明: (1)

参见IN指令说明;

- 4 -

计算机组成原理与汇编语言实验指导书

(2)把(AX)中的字数据送入05H和06H端口中。 OUT 5,AL

3. 目的地址传送指令用于获取操作数的地址信息 ★ LEA

格式:LEA reg16 , mem16

功能:把指令中指定的存储器操作数有效地址装入指定的寄存器 。 说明:

(1) LEA指令中的目标寄存器必须是16位的通用寄存器,源操作数必须是一个存储器。

(2) LEA 指令与MOV 的区别: LEA BX , BUFFER ;把BUFFER指向内存单元的有效地址送BX寄存器

MOV BX , BUFFER ;把BUFFER指向内存单元中的内容送BX寄存器

LEA 指令与MOV等价 LEA BX , BUFFER ;把BUFFER指向内存单元的有效地址送BX寄存器

MOV BX , OFFSET BUFFER ; 同上 ★ LDS

格式:LDS reg16, mem32

功能:将指令指定mem32内存单元中的前两个单元内容(16位偏移量)装入指令指定通用寄存器reg16,把后两个单元内容(段地址) 装入到DS段寄存器。 说明:

(1)LDS默认规定把mem32指向的后两个内存单元中的内容放入DS寄存器中。Reg16一般使用SI寄存器。 ★ LES

格式:LES reg16, mem32

功能:将指令指定mem32内存单元中的前两个单元内容(16位偏移量)装入指令指定通用寄存器reg16,把后两个单元内容(段地址) 装入到ES段寄存器。 说明:

(1)LES默认规定把mem32指向的后两个内存单元中的内容放入ES寄存器中。Reg16一般使用DI寄存器。

4. 标志传送指令用于完成和标志寄存器相关的操作,采用了隐含寄存器(AH、PSW)规定操作数方式,LAHF、PUSHF不影响标志位,SAHF、POPF由装入的值确定标志位的值, 即影响标志位。 ★ LAHF 格式:LAHF

功能:标志寄存器低八位低8位送入AH寄存器中。 说明:

(1)默认规定了AH寄存器和标志寄存器PSW的低8位;

- 5 -


组成与汇编实验指导书(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:在财务报表审计中应如何进行风险评估

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: