首页 > 其他 > 详细

第三章 寄存器(内存访问)

时间:2020-06-23 10:12:37      阅读:82      评论:0      收藏:0      [点我收藏+]

3.1内存中字的存储

一个字 = 2个字节。由于内存单元是字节单元(一个单元存放一个字节),存放字需要两个连续的内存单元,这个字的低位字节放在低地址单元,高位字节放在高地址单元

 

3.2 DS和[address] 对内存单元的读写

8086CPU中,内存地址由段地址和偏移地址组成,DS寄存器存放要访问的数据的段地址。如果将DS设置为1000H,不能直接 mov ds,1000H,  而是:mov ax,1000H   mov ds,ax 。(8086CPU不支持直接将数据(立即数)送入段寄存器的操作)

问题3.2 

将al中的数据送入内存单元10000H中。

mov bx,1000H

mov ds,bx

mov [0],al   ;;al低8位字节,所以送入8bit数据。操作的数据的长短跟据使用的寄存器的大小确定

 

sub和add等运算操作符不能操作段寄存器

 

检测点3.1:

(1) 在Debug中,用d 0:0 1F 查看内存,结果如下:

0000:0000  70 80 F0 30  EF  60 30  E2-00 80  80 12 66 20 22 60

0000:0010  62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 68

下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完成后相关寄存器中的值

mov ax,1

mov ds,ax

mov ax,[0000]  AX= 8070H  <---x ds设置为了0001,所以全部错了。。。     ---> 2662

mov bx,[0001]  BX= F080H  <---x                       E626

mov ax,bx      AX= F080H  <---x                            E626

mov ax,[0000]  AX= 8070H  <---x                       2662

mov bx,[0002]  BX= 30F0H  <---x                       D6E6

add ax,bx    AX= B160H  <---x                      FD48

add ax,[0004]   AX= 124FH  <---x                      2C14

mov ax,0    AX= 0000H  <---x                        0000

mov al,[0002]  AX= 00F0H  <---x                        00E6

mov bx,0      BX= 0000H  <---x                         0000

mov bl,[000C]   BX= 0066H  <---x                       0026

add al,bl    AX= 0156H  <---x                      010C

 

(2)内存中的情况如图,各寄存器的初始值: CS= 2000H, IP= 0, DS= 1000H, AX= 0, BX= 0;

.写出CPU执行的指令序列(用汇编指令写出)

.写出CPU执行每条指令后,CS,IP和相关寄存器中的值

.数据和代码在内存中有区别吗?如何确定内存中哪些信息是数据,哪些是程序?

 

第三章 寄存器(内存访问)

原文:https://www.cnblogs.com/linxisuo/p/13177133.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!