logo资料库

汇编语言 王爽 答案.pdf

第1页 / 共59页
第2页 / 共59页
第3页 / 共59页
第4页 / 共59页
第5页 / 共59页
第6页 / 共59页
第7页 / 共59页
第8页 / 共59页
资料共59页,剩余部分请下载后查看
第 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 1
检测点 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 章 寄存器(内存访问) 2
检测点 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 3
(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,将上面的程序段写入内存,逐条执行,根据指令执行后的实际 运行情况填空。 4
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 5
push ax push bx pop ax pop bx mov ax,4c00h int 21h codesg ends end 解:略 (2) 用 Debug 跟踪 t1.exe 的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内 容。 解: 6
(3)PSP 的头两个字节是 CD20,用 Debug 加载 ti.exe,查看 PSP 的内容。 解: 7
第 5 章 [BX]和 loop 指令 实验 4 [bx]和 loop 的使用 (1)编程,向内存 0:200~0:23F 依次传送数据 0~63(3FH)。 解: assume cs:codesg codesg segment mov ax,0 mov ds,ax mov bx,200H mov al,0 mov cx,64 s:mov [bx],al inc bx inc al loop s mov ax,4c00h int 21h codesg ends end (2)编程,向内存 0:200~0:23F 依次传送数据 0~63(3FH),程序中只能使用 9 条指令,9 条指令中包括“mov ax,4c00h”和“int 21h”。 8
分享到:
收藏