文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言王爽检测点答案

汇编语言王爽检测点答案

汇编语言王爽检测点答案

第一章.检测点

(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) 二进制

注:符号'^'指求幂运算(如: 2^30指2的30次方)

第二章

检测点

(1)大家做这题的时候一定要注意,要看清楚数制,比如是二进制还是十进制,还是十六进,我当时没注意,做错了!!呵呵!!

第一空:F4A3H

第二空:31A3H

第三空:3123H

第四空:6246H

第五空:826CH

第六空:6246H

第七空:826CH

第八空:04D8H

第九空:0482H

第十空:6C82H

第十一空:D882H

第十二空:D888H

第十三空:D810H

第十四空:6246H

(2)

mov ax,2

add ax,ax

add ax,ax

add ax,ax

检测点

(1)00010H 1000fH

(2)0001H 2000H

检测点

共修改了4次ip 第一次mov ax,bx 第二次是sub ax,ax 第三次是jmp ax 第四次是执行 jmp ax 最后ip的值是0 因为ax的值是零!!

检测点

(1)

第一空:2662H

第二空:E626H

第三空:E626H

第四空:2662H

第五空:D6E6H

第六空:FD48H

第七空:2C14H

第八空:0000H

第九空:00E6H

第十空:0000H

第十一空:0026H

第十二空:000CH

注意:ax中存取的是字型数据,高地址存放高字节,低地址存放低字节!!(一定要小心)

①写出cpu的执行序列Mov ax,6622

Jmp 0ff0:0100

Mov ax,2000H

Mov ds,ax

Mov ax ,[0008]

Mov ax,[0002]

指令执行顺序

寄存器

CS

IP

DS

AX

BX

初值

2000H

0000

1000H

mov ax,6622h

2000H

0003

1000H

6622H

0000

jmp 0ff0:0100

1000h

0000

1000H

0000

mov ax,2000h

1000H

0003

1000H

2000H

0000

mov ds,ax

1000H

0005

2000H

2000H

0000

mov ax,[0008]

1000H

0008

2000H

C389H

0000

mov ax,[0002]

1000H

000B

2000H

EA66H

0000

③数据和程序在计算机中都是以二进制的形式存放的,在区别程序和数据时,关键是看段地址,如果段地址是ds段,说明该内存中存放的是数据,如果段地址是cs段,说明该内存中存放的是程序指令

检测点

(1)

Mov ax,2000H

Mov ss,ax

Mov sp,0010H

(2)

Mov ax,1000H

Mov ss,ax

Mov sp,0000H

注意:出栈时和入栈时的顺序,空栈时栈顶指向的是最高端地址!栈满是栈顶指针指向的是最底端地址!!

2。实验任务

(1)

5BEA

5CCA

30F0

6023

00FE 2200:0100 5CCA

00FC 2200:00FE 6023

00FE 6023

0100 5CCA

00FE 2200:0100 30F0

00FC 22000:00FC 2E39

(2)

因为在DEBUG 中T命令在执行修改寄存器ss的指令时,会产生中断,将现场保护起来,下一条指令也紧接着被执行!!

实验三:

该实验自己做吧我做出来的东西只是我pc上的数据,可能在别的pc做出来的结果会不一样,在加之数据太多,我做了两次数据都没有完整的记下来,只好作罢!!

实验四: [bx]和loop的使用

(1)

assume cs:code

code segment

mov ax,0

mov ds,ax

mov cx,64

mov bx,200h

s:

mov ds:[bx],ax

inc bx

inc ax

loop s

mov ax,4c00H

int 21h

code ends

End

(2)如上题我一不小心写出来就是九条指令了!!!呵呵!!

(3)具体做法是将那段指令写道内存中,察看其在内存中的起始地址和终止地址,然后将该内存的内容复制到0:200处就可以了!!

检测点

(1)

Mov cs:[dx],ax

(2)

第一空:cs

第二空:26或者1ah

第三空:pop cs:[dx]

发表于 @ 2008年08月19日01:11:00 | 评论( 2 ) | 编辑| 举报| 收藏

旧一篇:常用命令(转) | 新一篇:实验五: 编写、调试具有多个段的程序

Copyright ? maokaijiang

Powered by CSDN Blog

十一川藏疯狂之旅

本文来自CSDN博客,转载请标明出处:王爽汇编语言答案(本答案是自己做的所有题目已在deubg中调试;但难免有差错,发现的提醒我谢谢)

(1)

① 1931(一直保持不变,由于pc不同答案有可能不一样)

②cs=1943 ss=1941 ds=1931 (由于pc不同,所以答案也可能不同,这只是机子上的数据)

③第一空:X—2

第二空:X—1

(2)

1.一直不变

2.答案不一样,就不写了

,X-1

4.(N/16+1)*16

(3)

1.一直不变

2.答案不一样

+3,X+4

(4)

答:可能执行,如果不指明标号,cpu顺序执行指令,所有可能正确执行!!!!

(5)

;******************************************

;将a段和b段指的数据依次相加,将结果保存到c段中

;*******************************************

assume cs:code

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

d segment

db 8 dup(0)

d ends

;********************************* ;代码段

;********************************* code segment

start:

mov ax,d

mov es,ax

mov ax,a

mov ds,ax

mov cx,8

mov ax,0

mov bx,0

again1:

mov dx,ds:[bx]

mov es:[ax],dx

inc bx

inc ax

loop again1

mov ax,b

mov ds,ax

mov ax,0

mov bx,0

mov cx,8

mov dx,0

again2:

add dx,ds:[bx]

mov es:[ax],dx

inc ax

inc bx

loop again2

mov ax,4c00h

int 21h

code ends

end start

(6)

;*****************************************************

;编写程序,用push指令将a段中的word数据,逆序存储到b段中;****************************************************** assume cs:code

a segment

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

a ends

b segment

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

b ends

code segment

start:

mov ax,b

mov ss,ax

mov sp,10h

mov ax,a

mov ds,ax

mov bx,0

mov cx,8

s: push [bx]

add bx,2

loop s

mov ax,4c00h

int 21h

code ends

end start

本文来自CSDN博客,转载请标明出处:ht(1)

本题略!!!

(2)

;***************************************************** ;编程,将datasg 段中的每个单词的前四个字母改写为大写字母;****************************************************** assume cs:codesg,ss:stacksg,ds:datasg

stacksg segment

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

stacksg ends

datasg segment

db '1. displsy '

db '2. brows '

db '3. replace '

db '4. modify '

datasg segment

codesg segment start:

mov ax,stacksg mov ss,ax

mov sp,16

mov ax,datasg mov ds,ax

mov dx,0

mov cx,4

s0:

push cx

mov si,0

mov cx,4

s1:

mov al,[bx+si+4] add al,B

mov [bx+si+4],al inc si

loop s1

add dx,16

pop cx

loop s0

mov ax,4c00h

int 21h

codesg ends

end start

本文来自CSDN博客,转载请标明出处: cs:codesg,ds:data,es:table

data segment

db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

db '1993','1994','1995'

;以上是表示21年的21个字符串

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

dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司总收的21个dword型数据

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

dw 11542,14430,45257,17800

;以上是表示21年公司雇员人数的21个word型数据data ends

table segment

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

table ends

codesg segment

start:

mov ax,data

mov ds,ax

mov ax,table

mov es,ax

mov cx,21

mov bx,0

mov si,0

mov di,0

s0:

;**************************************

;把年份送到table中

;**************************************

mov al,[bx]

mov es:[di],al

mov al,[bx+1]

mov es:[di+1],al

mov al,[bx+2]

mov es:[di+2],al

mov al,[bx+3]

mov es:[di+3],al

;******************************************** ;把收入送到table中

;******************************************** mov ax,54h[bx]

mov dx,56h[bx]

mov es:5h[di],ax

mov es:7h[di],dx

;**************************************

;把人数送到table中

;**************************************

mov ax,0A8h[si]

mov es:0Ah[di],ax

;**************************************

;计算人均收入并把其送到table中

;*****************************************

mov ax,54h[bx]

div word ptr 0A8h[si]

mov es:0Ch[di],ax

add si,2

add di,16

add dx,4

loop s0 ;循环21次

mov ax,4c00h

int 21h

codesg ends

end start

本文来自CSDN博客,转载请标明出处:第九章收藏检测点

(1)程序如下:

assume cs:code

data segment

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

data ends

code segment

start:mov ax,data

mov ds,ax

mov bx,0

jmp word ptr [bx+1]

mov ax,4c00h

int 21h

code ends

ends start

理由是:要是jmp跳转后执行第一条指令,本条指令是word ptr是段内转移必须满足ip=0 所以ds:[bx+1]的值必须为零,也就是data段的第二个数据必须为零

(2)第一空:bx

第二空:cs

(3) 本题可以先用debug将内存2000:1000中的内容写为BE 00 06 00 .....然后再调试可得到

cs=0006h ip=00BEh

检测点

;***************************************** ;实现在内存2000H段中查找第一个值为零的字节, ;找到后,将它的偏移地址存储到dx中

;****************************************** assume cs:code

code segment

start:

mov ax,2000H

mov ds,ax

mov bx,0

s:

mov cl,[bx]

mov ch,0

jcxz ok

inc bx

jmp short s

ok:

mov dx,bx

mov ax,4c00h

int 21h

code ends

end start

注:利用jcxz判断cx是否等于零来发生跳转,注意判断的是一个字节!!

检测点

;************************************************************

;利用loop指令,实现在内存2000H段中查找第一个值为零的byte,找到后;将它的偏移地址存储到dx中

;************************************************************* assume cs:code

code segment

start:

mov ax,2000H

mov ds,ax

mov bx,0

s:

mov cl,[bx]

mov ch,0

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