【微机原理作业】8086的寄存器和汇编程序的编译过程 | 您所在的位置:网站首页 › 程序编译过程及原理 › 【微机原理作业】8086的寄存器和汇编程序的编译过程 |
一.内容摘要
1、 利用 Proteus 和 emu8086 学习寄存器的相关知识 2、 利用 emu8086 简单程序编译仿真过程学习汇编程序与机器码的对应过程,掌握编译完成后的代码的存储原理。 二.8086寄存器8086微处理器的结构: 8086CPU的指令执行部件EU有4个16位的寄存器:AX、BX、CX、DX,8个8位的寄存器:AH、AL、BH、BL、CH、CL、DH、DL。 寄存器名称作用AX(累加器)存放参与运算的数据和结果BX(基址寄存器)可以作为数据寄存器,也可以存放内存的逻辑偏移地址CX(数据寄存器)可以作为数据寄存器,也可以在串指令和移位指令中计数DX(数据寄存器)可以作为数据寄存器,也可以用在乘、除法运算、带符号数的拓展 2.指针和变址寄存器8086CPU的EU中有2个地址指针寄存器SP、BP和2个变址寄存器SI、DI。 寄存器名称作用SP(堆栈指针寄存器)保存栈顶的偏移地址(隐含的逻辑段地址在堆栈段寄存器中)BP(基址指针寄存器)保存内存的偏移地址(隐含的逻辑段地址在堆栈段寄存器中)SI(源变址寄存器)保存内存的偏移地址(隐含的逻辑段地址在数据段寄存器中),也可以存放数据DI(目的变址寄存器)保存内存的偏移地址(隐含的逻辑段地址在数据段寄存器中),也可以存放数据 3.段寄存器8086CPU的总线接口部件(BIU)中有4个16位段寄存器。 寄存器名称作用CS(代码段寄存器)存放程序代码段起始地址的高16位DS(数据段寄存器)存放数据段起始地址的高16位SS(堆栈段寄存器)存放堆栈段起始地址的高16位ES(拓展段段寄存器)存放拓展数据段起始地址的高16位 4.指令指针寄存器指令指针寄存器IP存放当前代码段中的偏移地址,它与CS联用,可以形成下一条要取出指令的物理地址。 5.标志寄存器8086CPU有一个16位标志寄存器(FR),规定了9个标志位,包括6个状态标志(CF、PF、AF、ZF、SF和OF)和3个控制标志(IF、DF和TF)。 CF:进位标志位PF:奇偶标志位AF:辅助进位标志位ZF:零标志位SF:符号标志位OF:溢出标志位IF:中断允许标志位DF:方向标志位OF:溢出标志位 三.emu8086编译仿真过程 1.运行过程打开emu8086软件,新建一个asm文件,输入汇编程序。 下面以从1到100,100个数求和的程序作为例子,展示编译仿真的过程。 汇编程序: ; ;***************************************************************************** ; @file add.asm ; @author Xiaoxiao ; @date 2020-9-23 ; @brief 100个数求和(1+2+3+...+100) ; @blog https://blog.csdn.net/weixin_43470383/article/details/108625782 ;***************************************************************************** ; DATA SEGMENT total DW 0000H ENDS STACK SEGMENT dw 128 dup(0) ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: mov AX, DATA mov DS, AX mov ES, AX MOV CX, 100 MOV AX, 0 MOV BX, 1 add_100: ADD AX, BX INC BX LOOP add_100 MOV TOTAL, AX JMP $ ENDS END START
在机器码的左边可以看到8086的寄存器 当执行完 MOV CX, 100 时,CX寄存器变成 00 64(100D = 64H);执行完 MOV AX, 0 时,AX寄存器变成00 00;执行完 MOV BX, 1 时,BX寄存器变成 00 01。 继续运行,循环 add_100 共100次,每一次循环把BX的值加到AX上,然后BX加1,下一次 LOOP 循环的时候CX自动减1。 最终运行结果:AX变成 13 BA (5050D = 13BAH),BX变成 00 65(101D = 65H),CX变成 00 00。 (2)段寄存器汇编程序中用 段名 SEGEMNT … 段名 ENDS 来完成段的定义,用 ASSUME 段寄存器名:段名[, …] 来将某段分配给指定段寄存器 例如: ASSUME CS:CODE, DS:DATA即为段假设 mov AX, DATA mov DS, AX mov ES, AX即为给除CS以外的其他用到的段的段寄存器赋值 运行结果: CS:IP 两个寄存器共同指示了 CPU 当前将要读取的指令的地址。 单步执行指令,CPU 就要将偏移地址向下移动,IP地址将发生改变。 (4)标志寄存器在 view -> flags 中可以查看标志寄存器 在 view -> memory 中可以查看代码存储 将emu8086编译生成的 exe/com/bin 文件,输入到proteus的8086CPU,点击运行,然后在 调试 > 8086 > Registers 中可以查看8086的寄存器。 参考:《微机原理与接口技术》(第4版)电子工业出版社 |
CopyRight 2018-2019 实验室设备网 版权所有 |