32位微机原理上机实验报告:7种寻址方式指令编程
西北工业大学明德学院
实验报告
实验项目微机原理及应用
班级 121204
姓名田家豪王辰硕
学号 121566 121567
指导老师伍明高
时间 2015-3-24
7种寻址方式指令编程
实验目的
通过对传送和算术运算类指令的实验结果的观察和分析,加深对各指令完成操作功能的理解,并了解各指令对于相关标志位的影响。
实验内容
7种寻址方式指令的编程包括:
(1)MOV传送类;
(2)堆栈操作传送;
(3)交换传送;
(4)输入/输出传送;
(5)串传送指令等。
(6)在指令后面注释源操作数和目的操作数的寻址方式。
程序如下:
DA TA SEGMENT
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA
STADA TA
SEGMENTRT:MOV AX,DATA
MOV DS,AX
MOV AL,04H
MOV DX,2000H //立即寻址
MOV AX,99AAH
MOV BX,1257H
SUB AX,BX //寄存器寻址
MOV AX,5000H
MOV SI,3000H
MOV AX,DS:[SI] //寄存器间接寻址
PUSH AX
PUSH EBX
PUSH[SI]
PUSH DOWRD PTR[DI]
PUSHW 0A124H
PUSHD 20H //堆栈操作指令
MOV AX,3000H
XCHG AX,1000H
MOV 3000H,AX //交换传送指令
IN DX,7000H
IN AX,DX //输入指令
1. 建立文件,编写源程序。
2. 编译、连接生成EXE可执行文件。
3. 行调试,分析每条指令的寻址方式,验证操作数所在的地址空间。
实验总结
1. 通过本次实验,可以正确的编写传送类指令与算术运算类指令、逻辑运算类指令的应用实验,并了解了编译链接调试的过程,检查程序结果的正确与否,会观察分析。
2. 更加清楚的能分析各种运算指令,并对其有了更深的理解。
3. 实验过程中必须认真仔细,特别是在应用逻辑运算指令时,不然一旦有一点错误,实验就无法正常进行,必须返回去查找错误,费时费力。
微机原理及应用实验(题目)
微机原理及应用实验实验一开发环境的使用一、实验目的掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。
二、实验内容在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的30H~7FH 单元清零。
三、实验设备PC机一台。
四、实验步骤用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。
五、实验思考1.如果需把30H-7FH 的内容改为55H,如何修改程序?2.如何把128B的用户RAM全部清零?六、程序清单文件名称:CLEAR.ASMORG 0000HCLEAR: MOV R0,#30H ;30H 送R0寄存器MOV R6,#50H ;50H 送R6寄存器(用作计数器)CLR1: MOV A,#00H ;00 送累加器AMOV @R0,A ;00 送到30H-7FH 单元INC R0 ;R0 加1DJNZ R6,CLR1 ;不到50H个字节,继续WAIT: LJMP WAITEND实验二数据传送一、实验目的掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。
二、实验内容1.编制一段程序,要求程序中包含7中不同寻址方式。
2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。
3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。
4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看是否达到预期的效果。
五、实验思考1.如何把片外RAM中1000H~100FH单元中的数传送到片外RAM中2000H~200FH单元中?2.如何把ROM中0200H~0207H单元的数传送至片外RAM0000H~0007H单元中?实验三数码转换一、实验目的掌握采用软件方法进行不同形式数据之间的转换,如十进制数与二进制数的转换、十六进制数与BCD码的转换、BCD数与ASCII码之间的转换、非压缩BCD码与压缩BCD码之间的转换。
32位微机原理上机实验报告:各种逻辑指令的编程
西北工业大学明德学院实验报告实验项目微机原理及应用班级 121204姓名田家豪王辰硕学号 121566 121567指导老师伍明高时间 2015-3-31实验题目各种逻辑指令的编程实验目的1、掌握在PC机上各种逻辑指令的用法2、熟悉各种逻辑指令的用法实验内容在上次编辑七种寻址方式实验的中加入各种逻辑指令的运算,并且调试。
程序如下:STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMSR DB 'HELLO,WORLD!$'LEN EQU $- MSRDDATA ENDSEXDA SEGMENTMSD DB LEN DUP(?)EXDA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDATA,ES:EXDASTART: MOV AX,DDA TAMOV DS,AXMOV AX,EXDAMOV ES,AXMOV SI,OFFSET MSRMOV DI,OFFSET MSDMOV CX,LENMOV BX,0NEXT: MOV AL,MSR[BX]MOV ES:MSD[BX],ALINC BXLOOP NEXTPUSH ESPOP DSMOV DX,OFFSET MSDMOV AH,9INT 21HMOV AX,2233HMOV DX,3344HADD AX,DXADD AL,DLADD AX,5566HADC AL,DHDIV BLMOV BX,6677HMUL BXSBB AX,DXMOV AX,4C00HINT 21HCODE ENDSEND START实验步骤1. 运行编译器,编译程序。
2. 单击编译,保存。
3. 调试程序。
实验总结1. 通过实验,熟悉了各种逻辑指令的用法,了解了其程序的编译。
2. 调试程序的过程中需要不断地发现问题、解决问题。
3. 实验过程中,各指令的用法十分复杂,需要不断练习,熟悉指令的运行目的。
32位微机原理指令汇总
注意:::红笔写的为根据课本该写的,可能有错!!!一、数据传输指令作用:它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSH把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHA 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次. 移位一次时, 可直接用操作码. 如SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数. 如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序(控制)转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )一测试无符号整数运算的结果(标志C和Z).JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于或者进位为0转移.JB/JNAE 小于等于或者进位为1转移.JBE/JNA 小于或等于转移.二测试带符号整数运算的结果(标志S,O和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.三根据单个条件标志位转移的条件转移指令。
32位微机原理与接口技术
32位微机原理与接口技术冯·诺伊曼机具有基本特点;1.计算机由运算器、控制器、存储器、输入设备与输出设备五部分组成。
2.采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据一样可以送到运算器运算,即由指令组成的程序是可以修改的。
3.数据以二进制码表示。
4.指令由操作码和地址码组成。
8086微处理器的功能结构指令周期=取指周期+执行周期1.执行部件EU1)4个16位通用寄存器AX BX CXDX2)4个16位专用寄存器SP(堆栈指针)BP(基址指针)SI (源变址寄存器)DI(目的变址寄存器)3)16位标志寄存器状态标志有6个:CF、PF、AF、ZF、SF和OF进位标志CF 奇偶标志PF 辅助进位标志AF 零标志ZF符号标志SF 溢出标志OF控制标志有3个:TF、IF和DF跟踪标志TF 中断允许标志IF 方向标志df4)算术逻辑单元ALU 可以完成多种运算,包括加、减、乘、除等算术运算和与、或、非等逻辑运算。
2.总线接口部件BIU1)6字节的指令队列2)4个16位段地址寄存器CS、DS、SS、ES。
3)16位指令指针寄存器IP4)20位地址加法器由16位段地址寄存器和某个16位偏移地址相加,形成20位的地址,访问外部存储器。
U流水线和V流水线每条流水线都有自己的地址生成器、ALU。
U流水线可执行所有的整数和浮点指令(浮点指令会被提交给浮点单元实现);V流水线只能能执行简单的整数指令和一条异常的FXCH 指令。
IA-32微处理器的工作模式1.实地址模式32位微处理器完全模仿16位微处理器,只是功能稍强、速度更快。
通过修改控制寄存器CR0中的PE控制位,可以切换到保护模式。
2.保护模式该模式是处理器的原生模式,可访问4GB字节的物理存储空间,支持段、页两级保护机制,段有4个特权级,页面有2 个特权级。
0级为最高特权级,3为最低特权级。
可防止特权级低的程序或任务访问特权级高的段。
3.虚拟8086模式该模式不是一种专门的处理器工作模式,而是保护模式下的一种功能。
Win32汇编语言-寻址方式
2020/2/17
18
例:mov esi, offset array
直接
寻址
array的 地址
2020/2/17
19
2020/2/17
19
例:mov al, [esi]
寄存器间接 寻址
esi=00404000
地址00404000的 内容
2020/2/17
20
2020/2/17
20
例:mov al, [esi+4]
.data var1 BYTE 10h, 20h, 30h .code MOV esi, offset var1 INC BYTE PTR [esi]
2020/2/17
12
数组求和
.386
.model flat, stdcall
.data
W1 WORD 1234h, 5678h, 4321h, 8765h
2020/2/17
7
32位存储器寻址有效地址
32位有效地址=基址寄存器+变址寄存器+8/16/32位位移量
其中: • 位移量是8/16/32数值或者常量 • 任何32位通用寄存器都可以作为基址寄存器(默
认ESP/EBP使用SS;其他默认使用DS) • 任何除ESP之外的32位通用寄存器都可以作为变
.code
start:
mov ebx, offset array1
mov esi,1
mov al, [ebx+esi] ;也可以写成 mov al, [ebx][esi]
mov ebx, offset array2
mov al, [ebx+esi]
ret
;返回操作系统
end start
微机原理-实训-寻址方式
suogr@ 教学群号:31696867教9楼C506实验室西北师范大学计算机科学与工程学院 微机原理及汇编寻址方式索国瑞2014春选课班实训题目2014年3月24日星期一2西北师大计算机学院索国瑞:suogr @ 实训目的⏹初步了解指令的转移寻址方式⏹初步了解操作数的寻址方式⏹体验8086CPU 的物理地址和有效地址计算过程⏹进一步学习观察计算机运行状况⏹进一步学习分析计算机运行情况2014年3月24日星期一3西北师大计算机学院索国瑞:suogr @ 知识准备⏹寻址方式:就是确定操作对象的方式⏹ 依据操作对象的不同性质,寻址方式可分为: 与数据有关的寻址方式 与转移有关的寻址方式 隐含寻址⏹一般计算机系统中数据来源主要有以下四项 立即数:操作数在指令中 寄存器:操作数保存在寄存器中存储器:操作数保存在存储器中,一般就指内存 端口: 操作数在端口2014年3月24日星期一4西北师大计算机学院索国瑞:suogr @ 立即寻址⏹操作数作为立即数直接包含在指令中,紧跟在操作码之后与其一起存放在代码段区域。
取指令时与操作码一起被取入CPU的指令队列,不需要在指令执行时再访问存储器⏹例如 MOV AX, 1234H指令中的1234H就是立即数,其所对应的寻址方式就是立即寻址方式⏹立即数不能作为目的操作数使用,只能作为源操作数。
⏹8086指令系统中超过8位的立即数在存放时也遵循“低前高后”原则。
2014年3月24日星期一5西北师大计算机学院索国瑞:suogr @ 立即寻址例程分析⏹设有如下代码 MOV AL, 99H MOV BX, 1234H MOV CX, 5678H⏹这三条指令的源操作数都是立即数,都是立即寻址方式。
区别在于第一条指令的立即数是8位字节类型,而后两条指令的立即数都是16位字类型。
存储在内存中时要注意按照“低前高后”规则去理解⏹8086 CPU 指示将要执行的下一条指令的寄存器是CS 和IP ,前者提供段基址,后者提供段内偏移。
微机原理寻址方式
微机原理寻址方式
一、直接寻址
直接寻址是指微处理器从指令队列直接检索出一个指令,而另一种方法是间接寻址。
在直接寻址中,指令的参数是指令中内置的,指令的地址也是内置的。
这意味着,如果需要加载参数或者变更指令的地址,需要在另外的单元中完成。
因此,直接寻址是最简单易用的一种寻址方式,只要执行指令即可,不需要进行其他的复杂计算。
在微机原理中,直接寻址的一些指令如下:MOV,XCHG,JMP,CALL,RET等。
二、间接寻址
间接寻址是指微处理器从指令队列检索出的指令中,指令的参数可以在指令本身外面的处显示,而指令的地址可以在指令本身内部显示。
这意味着,在间接寻址中,需要计算参数和指令的地址,以便执行指令。
在微机原理中,一些间接寻址指令是:MOV[BX],M[BX]等。
三、基址寻址
基址寻址是一种特殊的间接寻址。
这种形式的寻址方式用于将一切基本操作符(包括引用操作数,存取操作码及一些常数)映射到一个寻址空间中。
这种寻址方式在微机原理中很常见,例如:MOVAL,[BX+SI],MOV[BX+SI],AL等。
四、索引寻址
索引寻址是一种特殊的间接寻址,这种寻址方式允许微处理器以索引(例如指令中的一些寄存器)来定位操作数。
32位微机原理03
负数求补运算,等效于用带借位的0 负数求补运算,等效于用带借位的0作减法
真值: 00H 08H 真值:-8,补码:[-8]补码=00H-08H=F8H 补码: 补码:11111000,真值: 00H H)= 08H 补码:11111000,真值:-(00H-F8H)=-08H=-8
+8 = 00001000 11110111 + 1 -8 = 11111000 0= -(8= -8 = 00000000 00001000) 11111000
定点格式( 定点格式(第3章) 浮点格式( 浮点格式(第9章)
微 机 原 理 与 接 口 技 术 · 第 4 版 机 械 工 业 出 版 社
1. 定点整数
定点格式: 定点格式:固定小数点的位置表达数值 定点整数: 定点整数:小数点固定在机器数的最右侧 定点小数: 定点小数:小数点固定在机器数的最左侧 无符号整数(无符号数) 无符号整数(无符号数)
示意图
十进制小数的转换
返回
微 机 原 理 与 接 口 技 术 · 第 4 版 机 械 工 业 出 版 社
二进制和十六进制数的相互转换
二进制和十六进制数之间具有对应关系 以小数点为基准 整数从左向右, 整数从左向右,小数从右向左 每4个二进制位对应一个十六进制位 00111010B 00111010B=3AH 11110010B F2H=11110010B
[X+ [X]补码+[Y]补码=[X+Y]补码 [X- [X]补码-[Y]补码=[X]补码+[-Y]补码=[X-Y]补码
微 机 原 理 与 接 口 技 术 · 第 4 版 机 械 工 业 出 版 社
4. 原码和反码
正数的原码、 正数的原码、反码和无符号数一样 求负数的原码、 求负数的原码、反码和补码
微机原理第三章寻址方式
MOV AX, 1000 ADD AL, [DI+2000]
02 85 00 20
C6 06 00 30 12
C7 06 00 30 34 12
MOV BYTE PTR[3000], 12
MOV WORD PTR[3000], 1234
操作码场 操作数场
操作数存在方式
在微型计算机中,操作数可能以以下三种方式存在:
二.立即寻址方式
这种寻址方式所提供 的操作数直接放在指令 MOV AL, C3H AL C3H
中,紧跟在操作码的后
面,与操作码一起放在 代码段区域中。立即数 可以是8位的,也可以 是16位. 立即寻址主要是用来 给寄存器赋初值.
MOV AX, 2050H
AH
AX 20H
AL
50H
三.寄存器寻址
操作数包含在CPU的内部寄存器中,
低地址
操作码 00H CS段
DS +
5000 0
3000 53000 50000 53000
30H
34H 12H
DS段 高地址
AX 12H 34H
如果操作数在DS以外的其他段(SS,ES)中,指令中必须指明 段寄存器(指定段超越前缀) MOV AX, ES:[3000H] 低地址 操作码
00H
ES + 2000 0 3000 23000 20000 23000 AX 12H 34H 34H 12H 30H
2.3 指令执行时间
总时间=基本执行时间+计算EA的时间+执行总线读/写
周期的时间
若存取的字操作数是从偶地址开始存放的规则字,其 存取可在一个总线周期完成,若存取的字操作数是从奇
地址开始存放的非规则字,其存取需在两个总线周期完
32位指令及其编程
;定义过程
checksumd PROC c USES bx cx,countp:word,arrayp:word mov bx,arrayp ;BX←数组的偏移地址 mov cx,countp ;CX←数组的元素个数 xor al,al sumd: add al,[bx] ;求和:AL←AL+DS:[BX] inc bx loop sumd ret checksumd endp 6.11
Visual C++的嵌入式汇编
格式 _ _asm { 指令 } 举例 _ _asm { mov eax,01h mov dx,0xD007 out dx,eax }
6.6
模块连接的注意事项
必须遵循共同的约定规则
命名约定 声明约定 寄存器使用约定 存储模式约定 参数传递约定
简单概括,略知一二
什么是混合编程
多种程序设计语言间,通过相互调用、参数 传递、共享数据结构和数据信息而形成程序 的过程就是混合编程
程序的大部分采用高级语言编写,以提高程 序的开发效率;在某些部分,利用汇编语言 编写,以提高程序的运行效率
6.1
混合编程方法
嵌入式汇编—— 在C/C++语言中直接使用汇编语言语句, 简洁直观、功能较弱 模块连接—— 两种语言分别编写独立的程序模块,分别产 生目标代码OBJ文件,然后进行连接,形成一 个完整的程序 使用灵活、功能强,要解决参数传递问题
供C语言程序调用的过程 .model small,c ;采用C语言类型 public min .code min proc ,var1:word,var2:word mov ax,var1 ;取第1个参数var1 cmp ax,var2 ;与第2个参数var2比较 jle minexit mov ax,var2 ;保存返回值 minexit: ret min endp end
