第1章基础知识
检测点1.1
(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。
(2)1KB的存储器有1024个存储单元。存储单元的编号从0到1023。
(3)1KB的存储器可以存储1024*8个bit,1024个Byte。
(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。(n^m的意思是n的m次幂)
(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
第2章寄存器答案
检测点2.1
(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3H
mov ah,31H AX=31A3H
mov al,23H AX=3123H
add ax,ax AX=6246H
mov bx,826CH BX=826CH
mov cx,ax CX=6246H
mov ax,bx AX=826CH
add ax,bx AX=04D8H
汇编指令有多少个mov al,bh AX=0482H
mov ah,bl AX=6C82H
add ah,ah AX=D882H
add al,6 AX=D888H
add al,al AX=D810H
mov ax,cx AX=6246H
(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解:
mov ax,2
add ax,ax
add ax,ax
add ax,ax
检测点2.2
(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
(2) 有一数据存放在内存 20000H 单元中,先给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H,最大为2000H。
检测点2.3
下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?
mov ax,bx
sub ax,ax
jmp ax
解:
修改4次;第一次在CPU读取“mov ax,bx”后,第二次在CPU读取“sub ax,ax”后,第三次在CPU读取“jmp ax”后,第四次在CPU执行完“mov ax,bx”后;最后IP中的值为0。
实验1 查看CPU和内存,用机器指令和汇编指令编程
1.略
2.
(1)略
(2)略
(3)查看内存中的内容。
PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请出这个生产日期并试图改变它。
解:内存FFF00H~FFFFFH为ROM区,内容可读但不可写。
(4)向内存从B8100H开始的单元中填写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
请读者先填写不同的数据,观察产生的现象;在改变填写的地址,观察产生的现象。
解:8086的显存地址空间是A0000H~BFFFFH,其中B8000H~BFFFFH为80*25彩字符模式显示缓冲区,当向这个地址空间写入数据时,这些数据会立即出现在显示器上。
第3章寄存器(内存访问)
检测点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=2662H
mov bx,[0001] BX=E626H
mov ax,bx AX=E626H
mov ax,[0000] AX=2662H
mov bx,[0002] BX=D6E6H
add ax,bx AX=FD48H
add ax,[0004] AX=2C14H
mov ax,0 AX=0000H
mov al,[0002] AX=00E6H
mov bx,0 BX=0000H
mov bl,[000C] BX=0026H
add al,bl AX=000CH
(2)内存中的情况如图3.6所示
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;
①写出CPU执行的指令序列(用汇编指令写出)。
②写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。
③再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?
解:初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0
①②
mov ax,6622H AX=6622H 其他寄存器保持不变,以下同理
jmp 0ff0:0100 CS=0ff0H,IP=0100H
mov ax,2000H AX=2000H
mov ds,ax DS=20000H
mov ax,[0008] AX=C389H
mov ax,[0002] AX=EA66H
③没有区别,被CS:IP指向的信息是程序;被传送、运算等指令操作的是数据。
检测点3.2
(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到200000H~2000FH 中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。
mov ax,1000H
mov ds,ax
mov ax,2000H
mov ss,ax
mov sp,10H
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]
(2) 补全下面的程序,使其可以将100000H~1000FH中的8个字,逆序复制到200000H~2000FH 中。
mov ax,2000H
mov ds,ax
mov ax,1000H
mov ss,ax
mov sp,0
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
实验2 用机器指令和汇编指令编程
1.预备知识:Debug的使用
略
2.实验任务
(1) 使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=58EA
add ax,[2] ;ax=5CCA
mov bx,[4] ;bx=30F0
add bx,[6] ;bx=6021
push ax ;sp=00FE;修改的内存单元的地址是220FE,内容为5CCA
push bx ;sp=00FC;修改的内存单元的地址是220FC,内容为6021
pop ax ;sp=00FE;ax=6021
pop bx ;sp=0100;bx=5CCA
push [4] ;sp=00FE;修改的内存单元的地址是220FE,内容为30F0
push [6] ;sp=00FC;修改的内存单元的地址是220FC,内容为2F31
注:内存中的数据会因机器、环境而异
(2) 仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
解:t命令为单步中断,CPU会保护现场,即顺序把标志寄存器、CS、IP入栈,此题是关于后面章节的中断问题。
第4章第一个程序
实验3 编程、编译、连接、跟踪
(1) 将下面的程序保存为t1.asm,将其生成可执行文件ti.exe。
assume cs:codesg
codesg segment
mov ax,2000h
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00h
int 21h
codesg ends
end
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论