王爽汇编第三章节学习作业贴

时间:2021-05-13 00:15:38

//2010-06-20 22:54:39

第三章 寄存器的内存访问

3.1~3.5 小结
1,字在内存中存储时,要用两个地址连续的内存单元存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
及高高低低
2,用MOV指令访问内存单元,可以在MOV 指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
3,[address]表示一个偏移地址为address的内存单元。
4,在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应。
5,MOV、ADD SUB是具有两个操作对象的指令。JMP是具有一个操作对象的指令。
检测点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 88
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值。
MOV AX,1
MOV DS,AX
MOV AX,[0000]              AX=2662   //理解了好久0000:0010 和0010:0000 为什么是一样的地址
MOV BX,[0001]              BX=E626
MOV AX,BX                    AX=E626
MOV AX,[0000]              AX=2662

MOV BX,[0002]               BX=D6E6
ADD AX,BX                     AX=FD48

ADD AX,[0004]               AX=2C14
MOV AX,0                      AX=0
MOV AL,[0002]               AX=00E6

MOV BX,0                       Bx=0
MOV BL,[000C]               BX=0026

ADD AL,BL                      AX=000C

2,内存中的情况如图3.6所示。
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;
 1,写出CPU执行的指令序列(用汇编指令写出).

MOV AX,6622H
JMP 0FF0:0100     ;调转到10000
MOV AX,2000H 
MOV DS,AX
MOV AX,[0008]
MOV AX,[0002]        ;MOV BX,AX   这条指令没被执行

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

MOV AX,6622H 执行后
CS=2000H,IP=3,AX=6622,DS=1000H,BX=0

JMP 0FF0:0100     ;调转到10000 执行后
CS=0FF0H,IP=0100,DS=1000,AX=6622H,BX=0

MOV AX,2000H 执行后

CS=0FF0H,IP=0103,DS=1000,AX=2000H,BX=0

MOV DS,AX 执行后
CS=0FF0H,IP=0105,DS=2000H,AX=2000H,BX=0
MOV AX,[0008] 执行后
CS=0FF0H,IP=0108,DS=2000H,AX=C389,BX=0

MOV AX,[0002] 执行后
CS=0FF0H,IP=010B,DS=2000H,AX=EA66,BX=0


3,再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?
存方形式:都是以二进制形式存方。
CS:IP 来确定代码段,DS+偏移地址来确定数据段

 

栈的综述

栈顶的变化范围最大为:0~FFH 8位,0~FFFFH 16位,0~FFFFFFFFH 32位,

0~FFFF FFFF FFFF FFFFH 64

1,在SS、SP中存放栈顶的段地址和偏移地址;
提供入栈和出栈指令,它们根据SS:SP指示的地址,按照栈的方式访问内存

单元。

2,PUSH指令的执行步骤:1,SP=SP-2; 2,向SS:SP指向的字单元中送入

数据。
3,POP指令的执行步骤:1,从SS:SP指向的字单元中读取数据;2,

SP=SP+2。
4,任意时刻,SS:SP指向栈顶元素。
5,8086CPU只记录栈顶,栈空间的大小我们要自已管理。
6,用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入

栈的顺序相反。
7,PUSH、POP实质上是一种内存传达指令,注意它们的灵活应用。

检测点3.2
1,补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到

20000H~2000FH中。
逆序复制的含义如图3.17所示(图中内存里的数据均为假设).
mov ax,1000H
mov ds,ax

mov bx,2000h
mov ss,bx
mov sp,10H

push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [c]
push [E]

2,补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到

20000H~2000FH中
mov ax,2000h
mov ds,ax

mov bx,1000h
mov ss,bx
mov sp,0

pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]


实验2 用机器指令和汇编指令编程

1,使用DEBUG,将上面的程序段写入内存,执行,根据指令执行后的实际运

行情况填空。
mov ax,ffff
mov ds,ax

mov ax,2200
mov ss,ax

mov sp,0100

mov ax,[0]             ;ax=2200
add ax,[2]             ;ax=5BEA
mov bx,[4]             ;bx=0000
add bx,[6]             ;bx=30f0

push ax                ;sp=0100
push bx                ;sp=00FE
pop ax                 ;sp=00FC 
pop bx                 ;sp=00FE 
push [4]               ;sp=0100
push [6]               ;sp=00FE