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