文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言(第2版)王爽著-课后实验报告详解

汇编语言(第2版)王爽著-课后实验报告详解

汇编语言(第2版)王爽著-课后实验报告详解
汇编语言(第2版)王爽著-课后实验报告详解

汇编语言实验报告

班级学号 学生姓名 提交日期

成 绩

实验1-1如下:

用E命令将指令写入内存:

用A命令将指令写入内存:

实验1-2代码如下:

用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。如图:

实验1-3:

用D命令输入内存fff0h~fffffh,则可看到:

生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有:

在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。

实验1-4代码如下:

内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节

实验2-1:(按实验结果填空)

Mov ax,ffff

Mov ds,ax

Mov ax,2200

Mov ss,ax

Mov sp,0100

Mov ax,[0] ;ax=5BEA

Add ax,[2] ;ax=5CCA

Mov bx,[4] ;bx=30F0

Add bx,[6] ;bx=6026

Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026.

Pop bx ;sp=0100; bx=.5CCA

Push [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:

实验2-2(分析问答实验)

答:因为T命令是单步中断,我们在后面学习后知道,CPU执行中断时会保留现场,即将标志寄存器,CS,IP等入栈,而实验中栈的地址正好是要查询的内存地址,所以即便未对内存单元进行写入命令,但里面的值会因为CPU要保留现场自动被改了

实验3

(1)代码:

ASSUME CS:CODES CODES SEGMENT START:

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 AH,4CH

INT 21H

CODES ENDS

END START (2)debug跟踪:

(3)用debug跟踪查看PSP中的内容:

可见PSP的头两个字节是CD 20,与书上的一致实验4-1代码如下:

ASSUME CS:CODES

CODES SEGMENT

START:

mov ax,0

mov ds,ax

mov bx,200h

mov cx,64

s: mov [bx],al

inc al

inc bx

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验4-1运行图如下:

实验4-2代码如下:

ASSUME CS:CODES

CODES SEGMENT

START:

mov ax,200h

mov ds,ax

mov bx,0

mov cx,64

s: mov [bx],bx

inc bx

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

运行结果同实验4-1的一样实验4-3(补全代码)

ASSUME CS:CODES

CODES SEGMENT

START:

mov ax,cs

mov ds,ax

mov ax,20h

mov es,ax

mov bx,0

mov cx,16h

s: mov al,[bx]

mov es:[bx],al

inc bx

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

因为要将代码复制到0:200处,则必须知道代码的地址,和代码的长度,代码的地址在cs和IP中,代码的长度可以编译后用U命令查看后确定,这个之前随便打一个数就可以,不影响代码的长度,因为那个数占的空间和真实的长度一样,所以用U命令后在改过来即可实验4-3的运行图如下:

实验5-1代码如下:

DA TAS SEGMENT

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

DA TAS ENDS

STACKS SEGMENT

dw 0,0,0,0,0,0,0,0

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS,SS:STACKS

START:

MOV AX,stacks

MOV ss,AX

mov sp,16

mov ax,datas

mov ds,ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验5-1运行图如下:

①CPU执行程序后,程序返回前,data段中的数据为多少?答:不变如上图

②CPU执行程序后,程序返回前,CS=144Ch,SS=144Bh,DS=144Ah。

③设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1.

实验5-2代码如下:

ASSUME CS:CODES,DS:DATAS,SS:STACKS

DA TAS SEGMENT

dw 0123h,0456h

DA TAS ENDS

STACKS SEGMENT

dw 0,0

STACKS ENDS

CODES SEGMENT

START:

MOV AX,stacks

MOV sS,AX

mov sp,16

mov ax,datas

mov ds,ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验5-2运行图如下:

①CPU执行程序后,程序返回前,data段中的数据为多少?答:不变如上图

②CPU执行程序后,程序返回前,CS=144Ch,SS=144Bh,DS=144Ah。

③设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1.

④对于如下定义的段:

Name segment

……

Name ends

如果段中的数据占N个字节,则程序加载后,该段实际占用空间为

16N倍。

实验5-3代码如下:

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS,SS:STACKS

START:

MOV AX,stacks

MOV sS,AX

mov sp,16

mov ax,datas

mov ds,ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

MOV AH,4CH

INT 21H

CODES ENDS

DA TAS SEGMENT

dw 0123h,0456h

DA TAS ENDS

STACKS SEGMENT

dw 0,0

STACKS ENDS

END START

实验5-3运行图如下:

①CPU执行程序后,程序返回前,data段中的数据为多少?答:不变如上图

②CPU执行程序后,程序返回前,CS=144Ch,SS=144Eh,DS=144Dh。

③设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

实验5-4:

如果将(1),(2),(3)题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序任然可以正确执行?

答:程序都可以正确执行,因为去掉start后,由于没有的标志,系统会将从code段的起始位置当作程序代码的开始处,然后一直执行下去,而这三个程序在start前没有其他的内容,去掉start也就不影响期功能了

实验5-5代码如下:

ASSUME CS:CODES

CODES SEGMENT

a SEGMENT

db 1,2,3,4,5,6,7,8

a ENDS

b SEGMENT

db 1,2,3,4,5,6,7,8

b ENDS

CC SEGMENT

db 0,0,0,0,0,0,0,0

CC ENDS

START:

MOV AX,a

MOV DS,AX

mov si,0

Mov cx,8

s: mov ax,0

add al,[0+si]

add al,[16+si]

Mov [32+si],al

inc si

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验5-5运行图如下:

实验5-6代码如下:

a SEGMENT

dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b SEGMENT

dw 0,0,0,0,0,0,0,0

b ENDS

CODES SEGMENT

ASSUME CS:CODES

START:

MOV AX,a

MOV DS,AX

mov bx,0

mov ax,b

mov ss,ax

mov sp,16

mov cx,8

s: push [bx]

add bx,2

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验5-6运行图如下:

实验6代码如下:

stacksg SEGMENT

dw 0,0,0,0,0,0,0,0

stacksg ENDS

datasg SEGMENT

db '1. display '

db '1. brows '

db '1. replace '

db '1. modifly '

datasg ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATASg,SS:STACKSg START:

MOV AX,DATASg

MOV DS,AX

mov bx,0

mov ax,stacksg

mov ss,ax

mov sp,16

mov cx,4

s0: push cx

mov si,3

mov cx,4

s: mov al,[bx+si]

and al,11011111b

mov [bx+si],al

inc si

loop s

add bx,16

pop cx

loop s0

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验6运行图如下:

实验7代码如下:

DA TAS SEGMENT

Db'1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','198 9','1990','1991','1992','1993','1994','1995'

dd 16,22,382,1356,2390,8000,16000,24486,50065,97497,140417,197514

dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw 11542,11430,15257,17800

DA TAS ENDS

table SEGMENT

db 21 dup('year summ ne ?? ')

table ENDS

CODES SEGMENT

ASSUME CS:CODES

START:

MOV AX,DATAS

MOV DS,AX

mov bp,0

mov ax,table

mov es,ax

mov di,0

mov bx,0

mov cx,21 ;循环21次,因为有21行

s: mov si,0 ;将年份入表

mov ax,ds:[si+bp] ;si是首地址,bp是相对si的偏移地址,bp每次加4

mov es:[di],ax

mov ax,ds:[si+bp+2]

mov es:[di+2],ax

mov si,84 ;将总收入入表

mov ax,ds:[si+bp]

mov es:[di+5],ax

mov ax,ds:[si+bp+2]

mov es:[di+7],ax

mov si,168 ;将人数入表

mov ax,ds:[si+bx] ;bx和bp的功能一样,只不过因为它只能每次加2 mov es:[di+10],ax

mov ax,es:[di+5] ;求人均收入并入表

mov dx,es:[di+7]

div word ptr es:[di+10]

mov es:[di+13],ax

add di,16

add bp,4

add bx,2

loop s

MOV AH,4CH

INT 21H

CODES ENDS

END START

实验7运行图如下:

实验8代码如下:

CODES SEGMENT

ASSUME CS:CODES

mov ax,4c00h

int 21h

START:

MOV AX,0

s: nop

nop

mov di,offset s

mov si,offset s2

mov ax,cs:[si]

mov cs:[di],ax

so: jmp short s

s1: mov ax,0

int 21h

mov ax,0

s2: jmp short s1

nop

CODES ENDS

END START

程序能正常执行完毕,因为在start后的第7,8行将s2处的代码写入了s处的两个空字节单元,而内容为EBF0,意思是从将当前IP 的值赋成(IP)-F0(八位位移,补码形式),赋值后IP指向了mov ax,4c00h,接着就结束程序了

实验9代码如下:

DA TAS SEGMENT

db'welcome to masm!'

DA TAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS

START:

MOV AX,DATAS

MOV DS,AX

mov bx,0

mov ax,0b800h

汇编语言 第二版 王爽 完整答案

第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,若想用偏移地址寻到此单元。

汇编语言王爽第二版课后答案

第一章基础知识 检测点(第8页) ---------------------- (1) 13 (2) 1024,0,1023 (3) 8192,1024 (4) 2^30,2^20,2^10 (5) 64,1,16,4 (6) 1,1,2,2,4 (7) 512,256 (8) 二进制 注意: 1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方) 第二章寄存器(CPU工作原理) 检测点(第18页) ---------------------- (1)写出每条汇编指令执行后相关寄存器中的值。第一空:F4A3H 第二空:31A3H 第三空:3123H 第四空:6246H 第五空:826CH 第六空:6246H 第七空:826CH 第八空:04D8H 第九空:0482H 第十空:6C82H 第十一空:D882H 第十二空:D888H 第十三空:D810H 第十四空:6246H (2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解答如下: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点(第23页) ---------------------- (1)00010H,1000FH (2)1001H,2000H 第2题说明: 因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法寻到。 检测点(第33页) ----------------------答:CPU修改了4次IP的值。 情况如下: 第1次:执行完mov ax,bx后 第2次:执行完sub ax,ax后 第3次:读入jmp ax后 第4次:执行完jmp ax后 最后IP的值为0 实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页) ----------------------------------------------------- 1.预备知识:Debug的使用 <此部分略> 2.实验任务(第43页) (1) <此部分略> (2) <此部分略> (3) 通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’属性。 (4) 通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输出到屏幕上。<注:关于显存的详细讨论不在此题范围> 第三章寄存器(内存访问) 检测点(第52页) ---------------------- (1)(题目:略) 第一空:2662H 第二空:E626H 第三空:E626H 第四空:2662H 第五空:D6E6H 第六空:FD48H 第七空:2C14H 第八空:0000H 第九空:00E6H 第十空:0000H 第十一空:0026H 第十二空:000CH 提示:此题可在DEBUG中利用E命令在本机上按照题目中所给出的内存单元及其数据进行相应地修改,然后再用A命令进行写入(题目中所给出的)相应的汇编指令,最后再进行T命令进行逐步执行,以查看相应结果。

汇编语言(王爽)_第二版_课后题全_答案25

0000:0203 8ED8 MOV DS,AX 0000:0205 B82000 MOV AX,0020 0000:0208 8EC0 MOV ES,AX 0000:020A BB0000 MOV BX,0000 0000:020D B91800 MOV CX,0018 0000:0210 8A07 MOV AL,[BX] 0000:0212 26 ES: 0000:0213 8807 MOV [BX],AL 0000:0215 43 INC BX 0000:0216 E2F8 LOOP 0210 0000:0218 0000 ADD [BX+SI],AL 0000:021A 0000 ADD [BX+SI],AL 0000:021C 0000 ADD [BX+SI],AL 0000:021E 0000 ADD [BX+SI],AL -q 检测点6.1 (1) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序: assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h start: mov ax,0 mov ds,ax mov bx,0 mov cx,8 s: mov ax,[bx]

mov cs:[bx],ax add bx,2 loop s mov ax,4c00h int 21h codesg ends end start (2) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序: assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0 ;10个字单元用栈空间 start: mov ax,cs mov ss,ax mov sp,36 mov ax,0 mov ds,ax mov bx,0 mov cx,8 s: push [bx]

汇编语言王爽第二版课后答案

第一章基础知识 检测点1.1(第8页) ---------------------- (1) 13 (2) 1024,0,1023 (3) 8192,1024 (4) 2^30,2^20,2^10 (5) 64,1,16,4 (6) 1,1,2,2,4 (7) 512,256 (8) 二进制 注意: 1.第4题中的符号'^'指求幂运算(如: 2^30指2的30次方) 第二章寄存器(CPU工作原理) 检测点2.1(第18页) ---------------------- (1)写出每条汇编指令执行后相关寄存器中的值。第一空:F4A3H 第二空:31A3H 第三空:3123H 第四空:6246H 第五空:826CH 第六空:6246H 第七空:826CH 第八空:04D8H 第九空:0482H 第十空:6C82H 第十一空:D882H 第十二空:D888H 第十三空:D810H 第十四空:6246H (2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解答如下: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2(第23页) ---------------------- (1)00010H,1000FH (2)1001H,2000H 第2题说明: 因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法寻到。 检测点2.3(第33页) ----------------------答:CPU修改了4次IP的值。 情况如下: 第1次:执行完mov ax,bx后 第2次:执行完sub ax,ax后 第3次:读入jmp ax后 第4次:执行完jmp ax后 最后IP的值为0 实验1 查看CPU和内存,用机器指令和汇编指令编程(第33页) ----------------------------------------------------- 1.预备知识:Debug的使用 <此部分略> 2.实验任务(第43页) (1) <此部分略> (2) <此部分略> (3) 通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’属性。 (4) 通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输出到屏幕上。<注:关于显存的详细讨论不在此题范围> 第三章寄存器(内存访问) 检测点3.1(第52页) ---------------------- (1)(题目:略) 第一空:2662H 第二空:E626H 第三空:E626H 第四空:2662H 第五空:D6E6H 第六空:FD48H 第七空:2C14H 第八空:0000H 第九空:00E6H 第十空:0000H 第十一空:0026H 第十二空:000CH 提示:此题可在DEBUG中利用E命令在本机上按照题目中所给出的内存单元及其数据进行相应地修改,然后再用A命令进行写入(题目中所给出的)相应的汇编指令,最后再进行T命令进行逐步执行,以查看相应结果。

汇编语言(王爽)_第二版_课后题全_答案1

检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13)个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30)个Byte、1MB是 1048576(2^20)个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、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)在存储器中,数据和程序以二进制形式存放。 解题过程: (1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理 1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。 检测点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

汇编语言(王爽)_第二版_课后题全_答案11

AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0005 NV UP EI PL NZ NA PO NC 2000:0005 EBFC JMP 0003 -t AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=2000 IP=0003 NV UP EI PL NZ NA PO NC 2000:0003 01C0 ADD AX,AX -q 实验一查看CPU和内存,用机器指令和汇编指令编程 (3) 查看内存中的内容 PC主板上的ROM中有个一出产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个出产日期并试图改变它。 Microsoft(R) Windows DOS (C)Copyright Microsoft Corp 1990-2001. C:\DOCUME~1\ADMINI~1>debug -d ffff:0 f FFFF:0000 EA 5B E0 00 F0 31 32 2F-32 35 2F 30 37 00 FC 59 .[...12/25/07..Y -q 地址C0000~FFFFF的内存单元为只读存储器,写入数据操作是无效的。 因此出产日期无法改变。 下面内容摘自于网上 还有另一种情况,如果你发现你能修改ROM中的生产日期,那么原因如下: 每个计算机的结构都不一样,教材考虑的是普通8086PC机上的效果,个别计算机的效果可能不同。 也就是说在你的计算机中这个内存是可修改的 所以,认为所有的计算机某些地址的内存不能修改是片面的。 书上说rom是只读的你就不去验证了吗?如何验证呢? 我觉得这个实验最大的好处不是让我们验证了这个知识点,而是提醒我们要有怀疑的精神,怀疑之后再去验证才能跟深刻的理解知识,提升自己的能力,甚至还会发现有些书上描述的不准确甚至错误的地方。

汇编语言(王爽)_第二版_课后题全_答案7

01 d8 add ax,bx ax=8236H 89 c3 mov bx,ax bx=8236H 01 d8 add ax,bx ax=046CH b8 1a 00 mov ax,001AH ax=001AH bb 26 00 mov bx,0026H bx=0026H 00 d8 add al,bl ax=0040H 00 dc add ah,bl ax=2640H 00 c7 add bh,al bx=4026H b4 00 mov ah,0 ax=0040H 00 d8 add al,bl ax=0066H 04 9c add al,9CH ax=0002H Microsoft(R) Windows DOS (C)Copyright Microsoft Corp 1990-2001. C:\DOCUME~1\ADMINI~1>debug -a 0C1C:0100 mov ax,4e20 0C1C:0103 add ax,1416 0C1C:0106 mov bx,2000 0C1C:0109 add ax,bx 0C1C:010B mov bx,ax 0C1C:010D add ax,bx 0C1C:010F mov ax,001a 0C1C:0112 mov bx,0026 0C1C:0115 add al,bl 0C1C:0117 add ah,bl 0C1C:0119 add bh,al 0C1C:011B mov ah,0 0C1C:011D add al,bl 0C1C:011F add al,9c 0C1C:0121 -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC 0C1C:0100 B8204E MOV AX,4E20

汇编语言第二版王爽完整答案

薈芃莃肆蒀膁蚃第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

汇编语言(王爽)_第二版_课后题全_答案9

0C1C:0117 00DC ADD AH,BL -t AX=2640 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0119 NV UP EI PL NZ NA PO NC 0C1C:0119 00C7 ADD BH,AL -t AX=2640 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011B NV UP EI PL NZ NA PO NC 0C1C:011B B400 MOV AH,00 -t AX=0040 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011D NV UP EI PL NZ NA PO NC 0C1C:011D 00D8 ADD AL,BL -t AX=0066 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=011F NV UP EI PL NZ NA PE NC 0C1C:011F 049C ADD AL,9C -t AX=0002 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0121 NV UP EI PL NZ AC PO CY 0C1C:0121 D3990075 RCR WORD PTR [BX+DI+7500],CL DS:B526=0000 -q 实验一查看CPU和内存,用机器指令和汇编指令编程 (2)将下面的3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。 mov ax,1 add ax,ax jmp 2000:0003 Microsoft(R) Windows DOS (C)Copyright Microsoft Corp 1990-2001. C:\DOCUME~1\ADMINI~1>debug -a 2000:0 2000:0000 mov ax,1 2000:0003 add ax,ax 2000:0005 jmp 2000:0003

汇编语言(王爽)_第二版_课后题全_答案12

--引用这几本书综合研究的三个问题: 都再用,我们就非得用吗? 规定了,我们就只知道遵守吗? 司空见惯,我们就不怀疑了吗? 尽信书不如无书大概也有这个道理吧^_^ 检测点3.1 (1) 在DEBUG中,用"D 0:0 lf" 查看内存,结果如下: 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= 0 mov al,[0002] ax= 00e6H mov bx,0 bx= 0 mov bl,[000c] bx= 0026H add al,bl ax= 000CH 用DEBUG进行验证: Microsoft(R) Windows DOS (C)Copyright Microsoft Corp 1990-2001. C:\DOCUME~1\000>debug -e 0000:0 0000:0000 68.70 10.80 A7.f0 00.30 8B.ef 01.60 70.30 00.e2 0000:0008 16.00 00.80 AF.80 03.12 8B.66 01.20 70.22 00.60

汇编语言(王爽)_第二版_课后题全_答案2

add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H Microsoft(R) Windows DOS (C)Copyright Microsoft Corp 1990-2001. C:\DOCUME~1\ADMINI~1>debug -a 0C1C:0100 mov ax,f4a3 0C1C:0103 mov ah,31 0C1C:0105 mov al,23 0C1C:0107 add ax,ax 0C1C:0109 mov bx,826c 0C1C:010C mov cx,ax 0C1C:010E mov ax,bx 0C1C:0110 add ax,bx 0C1C:0112 mov al,bh 0C1C:0114 mov ah,bl 0C1C:0116 add ah,ah 0C1C:0118 add al,6 0C1C:011A add al,al 0C1C:011C mov ax,cx 0C1C:011E -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC 0C1C:0100 B8A3F4 MOV AX,F4A3 -t AX=F4A3 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL NZ NA PO NC 0C1C:0103 B431 MOV AH,31 -t AX=31A3 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0105 NV UP EI PL NZ NA PO NC

汇编语言(第2版)王爽著-课后实验报告详解

汇编语言实验报告 : 班级学号 学生姓名 提交日期 成 绩

实验1-1如下: 用E命令将指令写入内存:

用A命令将指令写入内存: 实验1-2代码如下: 用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。如图:

实验1-3: 用D命令输入内存fff0h~fffffh,则可看到:

生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有: 在window7下虚拟的dos中可以改,但如果重新打开dos中的debug则日期任然不会改变,因为那是ROM。 实验1-4代码如下:

内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节 实验2-1:(按实验结果填空) Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax=5BEA Add ax,[2] ;ax=5CCA Mov bx,[4] ;bx=30F0 Add bx,[6] ;bx=6026 Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是

汇编语言(王爽)_第二版_课后题全_答案5

DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC 0C1C:0100 B80200 MOV AX,0002 -t AX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL NZ NA PO NC 0C1C:0103 01C0 ADD AX,AX -t AX=0004 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0105 NV UP EI PL NZ NA PO NC 0C1C:0105 01C0 ADD AX,AX -t AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0107 NV UP EI PL NZ NA PO NC 0C1C:0107 01C0 ADD AX,AX -t AX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0109 NV UP EI PL NZ AC PO NC 0C1C:0109 20881615 AND [BX+SI+1516],CL DS:1516=00 -q 检测点2.2 (1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH 。 解题过程: 物理地址=SA*16+EA EA的变化范围为0h~ffffh 物理地址范围为(SA*16+0h)~(SA*16+ffffh) 现在SA=0001h,那么寻址范围为 (0001h*16+0h)~(0001h*16+ffffh) =0010h~1000fh 检测点2.2 (2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为 1001H ,最大为 2000H 。 当段地址给定为 1001H 以下和2000H 以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。

汇编语言(王爽)第二版答案

汇编语言第二版答案-王爽 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13)个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30)个Byte、1MB是 1048576(2^20)个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、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)在存储器中,数据和程序以二进制形式存放。 解题过程: (1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。 (5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个存单元。(一个存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理 1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。 检测点 2.1

汇编语言(王爽)第二版答案

汇编语言第二版答案-王爽 检测点 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。(2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到1023 。 (3)1KB的存储器可以存储 8192(2^13)个bit, 1024个Byte。(4)1GB是 24 (2^30)个Byte、1MB是 1048576(2^20)个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、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)在存储器中,数据和程序以二进制形式存放。

解题过程: (1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。(4)1GB=24B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。 (5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。 检测点 (1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H

相关文档
相关文档 最新文档