1、汇编语言王爽课后答案汇编语言王爽课后答案【篇一:汇编语言课后习题答案 王爽主编】一个值为 0 的字节,找到后,将它的偏移地址存储在 dx 中。 assume cs:code code segment start: mov ax,2000h mov ds,axmov bx,0s: mov ch,0 mov cl,bx jcxz ok; 当 cx=0 时, cs:ip 指向 okinc bx jmp short s ok: mov dx,bx mov ax ,4c00h int 21h code ends end start 检测点 9.3补全编程,利用 loop 指令,实现在内存 2000h 段
2、中查找第一个值 为 0 的字节,找到后,将它的偏移地址存储在 dx 中。assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s:mov cl,bx mov ch,0 inc cx inc bx loop s ok:dec bx mov dx,bx mov ax,4c00h int 21h code ends end start 书 p101 ,执行 loop s 时,首先要将 (cx) 减 1 。 “loop 标号”相当于 dec cxif(cx) 工 0) jmp short标号检测点 10.1 补全程序,实现
3、从内存 1000 :0000 处开始执行指令。 assume cs:code stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, 1000h mov ax,0 push ax retf code ends end start 执行 reft 指令时,相当于进行: pop ip pop cs 根据栈先进后出原则,应先将段地址 cs 入栈,再将偏移地址 ip 入 栈。检测点 10.3 下面的程序执行后, ax 中的数值为多少? 内存地址机器码 汇编指令
4、执行后情况 1000:0 b8 00 00 mov ax,0 ax=0,ip 指向 1000:3 1000:3 9a 09 00 00 10 call far ptr s pop cs,pop ip,ip 指向 1000:91000:8 40 inc ax1000:9 58 s:pop ax ax=8h add ax,ax ax=10h pop bx bx=1000h add ax,bx ax=1010h 用 debug 进行跟踪确认, “ call far ptr s 是先”将该指令后的第一个 字节段地址 cs=1000h 入栈,再将偏移地址 ip=8h 入栈,最后转到 标号处执行指令。出栈
5、时,根据栈先进后出的原则,先出的为 ip = 8h,后出的为cs =1000h检测点 10.4下面的程序执行后, ax 中的数值为多少? 内存地址机器码 汇编指令 执行后情况 1000:0 b8 06 00mov ax,6 ax=6,ip 指向 1000:31000:3 ff d0call ax pop ip,ip 指向 1000:61000:5 40inc ax1000:6 58mov bp,spbp=sp=fffeh add ax,bp ax=6+ds:(fffeh)=6+5=0bh 用 debug 进行跟踪确认, “ call ax(16 位 reg) ”是先将该指令后的第 一个字节偏移
6、地址 ip 入栈,再转到偏移地址为 ax(16 位 reg) 处执行 指令。检测点 10.5 (1)下面的程序执行后, assume cs:code stack segment dw 8 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ds,ax mov ax,0 call word ptr ds:0eh inc ax inc ax mov ax,4c00h int 21h code ends end start 推算: 执行 call word ptr ds:0eh 最后 ip 转移到 (
7、ds:0eh) ax=3ax 中的数值为多少?指令时,先 cs 入栈,再 ip=11 入栈, (ds:0eh)=11h ,执行 inc ax? 最终题中特别关照别用 debug 不住去试试,看是什么结果。 根据单步跟踪发现,执行 call word ptr ds:0eh 指令时,显示 ds:0eh = 065d。跟踪,跟踪结果不一定正确,但还是忍ds:0000ds:0010 不是已设置成 stack 数据段了嘛,不是应该全都 是 0 的嘛。于是进行了更详细的单步跟踪,发现初始数据段中数据确实为 0, 但执行完 mov ss,ax ; mov sp,16 这两条指令后,数据段中数据发 生改变。这
8、是为什么呢?中断呗 检测点 10.5( 2)下面的程序执行后, ax 和 bx 中的数值为多少? assume cs:codesgstack segment dw 8 dup(0) stack ends codesg segment start: mov ax,stack mov ss,ax mov sp,10h mov word ptr ss:0,offset s ;(ss:0)=1ah mov ss:2,cs ;(ss:2)=cscall dword ptr ss:0 ;cs 入栈 ,ip=19h 入栈 , 转到 cs:1ah 处执行指 令;(ss:4)=cs,(ss:6)=ip nops
9、: mov ax,offset s ;ax=1ah sub ax,ss:0ch ;ax=1ah-(ss:0ch)=1ah-19h=1mov bx,cs ;bx=cs = 0c5bhsub bx,ss:0eh ;bx=cs-cs=0 mov ax,4c00hint 21h codesg ends end start c:docume1admini1debug jc10-5.exe -u0c5b:0000 b85a0c mov ax,0c5a0c5b:0003 8ed0 mov ss,ax0c5b:0005 bc1000 mov sp,00100c5b:0008 36ss:0c5b:0009 c7
10、0600001a00 mov word ptr 0000,001a0c5b:000f 36ss:0c5b:0010 8c0e0200mov 0002,cs0c5b:0014 36ss:0c5b:0015 ff1e0000call far 00000c5b:0019 90nop0c5b:001a b81a00 mov ax,001a0c5b:001d 36ss:0c5b:001e 2b060c00sub ax,000c -u0c5b:0022 8ccb mov bx,cs0c5b:0024 36ss:0c5b:0025 2b1e0e00sub bx,000e 0c5b:0029 b8004c m
11、ov ax,4c00 课程设计一将实验 7 中的 power idea 公司的数据按照图所示的格式在屏幕上 显示现来 table segmentdb 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990,1991,1992 db 1993,1994,1995dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197 514 dd 345980,590827,803530,1183000,1843000,2795000,
12、3753000,4649 000,5937000 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8 226 dw 11542,14430,15257,17800 dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224, 239 dw 260,304,333 table ends data segment db 32 dup (0) data ends code segment start: mov ax,data mov ds,ax mov
13、 ax,table mov es,ax mov bx,0 mov si,0mov di,0 mov cx,21 mov dh,2 mov dl,30 g: push cx push dx mov ax,es:bx mov si,ax mov ax,es:bx.2 mov si.2,ax ; 年份入 ds:si add si,6 mov ax,es:bx.84 mov dx,es:bx.86 call dtoc2 ; 收入转成十进制字符入 ds:si add si,10 mov ax,es:di.168 mov dx,0 call dtoc2 ; 人员数转成十进制字符入 ds:si add si
14、,6 x,es:di.210 mov dx,0call dtoc2 ; 人均收入转成十进制字符入 ds:si mov si,0 ; 设置 ds:si 指向需显示字符首地址 b: mov cx,29 c: push cx mov cl,sijcxz f ;(ds:si)=0 转到 f 执行 d: inc si pop cx loop c inc si mov al,0mov si,al ; 设置结尾符 0mov si,0 ; 设置 ds:si 指向需显示字符首地址 pop dx mov cl,2 call show_stradd bx,4 ;dword 数据指向下一数据单元 add di,2 ;
15、word 数据指向下一数据单元add dh,1 ; 指向显存下一行pop cx loop g mov ax,4c00h int 21h f: mov al,20h mov si,al ;(ds:si)=0 的数据改成空格 jmp d; 名称: dtoc2; 功能:将 dword 型数据转变为表示十进制的字符串,字符串以 0 为结尾符。 ; 参数: (ax)=dword 型数据的低 16 位; ;(dx)=dword 型数据的高 16 位;;ds:si 指向字符串首地址。; 返回:无。dtoc2:push axpush bxpush cxpush dx push si push di mov d
16、i,0 d20: mov cx,10 ; 除数为 10 call divdwadd cx,30h ; 余数 +30h ,转为字符push cx ; 字符入栈inc di ; 记录字符个数 mov cx,axjcxz d21 ; 低位商 =0 时,转到 d21 检测高位商jmp d20d21: mov cx,dxjcxz d22 ; 高低位商全 =0 时,转到 d22 执行jmp d20d22: mov cx,did23: pop ax ; 字符出栈 mov si,al inc si ;ds:si 指向下一单元 loop d23mov al,0mov si,al ; 设置结尾符 0pop di
17、pop si pop dx pop cx pop bx pop ax ret 【篇二:汇编语言第二版习题答案 ( 全 ) 王爽编写】1 个 cpu 的寻址能力为 8kb ,那么它的地址总线的宽度为 13 位。(2)1kb 的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。(3) 1kb的存储器可以存储 8192 (2八13 ) 个bit , 1024个byte(4)1gb 是 1073741824 (2A30 ) 个 byte、1mb 是 1048576(2A20 ) 个 byte、1kb 是 1024 (2八10 )个 byte。(5)8080、 8088、 80296
18、、 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)在存储器中,数据和程序以 二进制 形式存放。解
19、题过程:( 1 ) 1kb=1024b , 8kb=1024b*8=2An , n=13 。(2) 存储器的容量是以字节为最小单位来计算的, 1kb=1024b 。(3)8bit=1byte , 1024byte=1kb (1kb=1024b=1024b*8bit )。(4)1gb=1073741824b (即 2A30 ) 1mb=1048576b (即 2A20 ) 1kb=1024b (即 2A10 )。( 5)一个 cpu 有 n 根地址线,则可以说这个 cpu 的地址总线的宽 度为n。这样的cpu最多可以寻找2的n次方个内存单元。(一个 内存单元 =1byte )。(6) 8根数据总
20、线一次可以传送 8位二进制数据(即一个字节)。2b)(7) 8086 的数据总线宽度为 16 根(即一次传送的数据为 1024b/2b=512 ,同理 1024b/4b=256 。(8)在存储器中指令和数据没有任何区别,都是二进制信息。 检测点 2.1(1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627ax=f4a3h mov ah,31h ax=31a3h mov al,23h ax=3123h add ax,axax=6246h mov bx,826chbx=826ch mov cx,axcx=6246h mov ax,bxax=826ch add ax,bxax=0
21、4d8h mov al,bhax=0482h mov ah,blax=6c82h add ah,ahax=d882h add al,6 ax=d888h add al,alax=d810h mov ax,cxax=6246h microsoft(r) windows dos (c)copyright microsoft corp 1990-2001. c:docume1admini1debug 0c1c:0100 mov ax,f4a3 0c1c:0103 mov ah,31 0c1c:0105 mov al,23 0c1c:0107 add ax,ax 0c1c:0109 mov bx,82
22、6c 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=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0100nv
23、up ei pl nz na po nc0c1c:0100 b8a3f4 mov ax,f4a3-tax=f4a3 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0103nv up ei pl nz na po nc0c1c:0103 b431 mov ah,31-tax=31a3 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0
24、105nv up ei pl nz na po nc0c1c:0105 b023 mov al,23-tax=3123 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0107nv up ei pl nz na po nc0c1c:0107 01c0 add ax,ax-tax=6246 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip
25、=0109nv up ei pl nz na po nc0c1c:0109 bb6c82 mov bx,826c-tax=6246 bx=826c cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=010cnv up ei pl nz na po nc0c1c:010c 89c1 mov cx,ax-tax=6246 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0
26、c1c ip=010env up ei pl nz na po nc0c1c:010e 89d8 mov ax,bxax=826c bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0110nv up ei pl nz na po nc0c1c:0110 01d8 add ax,bx-tax=04d8 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0
27、c1c ip=0112ov up ei pl nz ac pe cy0c1c:0112 88f8 mov al,bh-tax=0482 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0114ov up ei pl nz ac pe cy0c1c:0114 88dc mov ah,bl-tax=6c82 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs
28、=0c1c ip=0116ov up ei pl nz ac pe cy0c1c:0116 00e4 add ah,ah-tax=d882 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0118ov up ei ng nz ac pe nc0c1c:0118 0406 add al,06-tax=d888 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c
29、cs=0c1c ip=011anv up ei ng nz na pe nc0c1c:011a 00c0 add al,al-tax=d810 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=011cov up ei pl nz ac po cy0c1c:011c 89c8 mov ax,cx-tax=6246 bx=826c cx=6246 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1
30、c cs=0c1c ip=011eov up ei pl nz ac po cy0c1c:011e 0b0c orcx,si ds:0000=20cd-q检测点 2.1(2) 只能使用目前学过的汇编指令,最多使用 4 条指令,编程计算 2 的 4 次方。mov ax,2ax=2add ax,ax ax=4add ax,ax ax=8add ax,ax ax=16microsoft(r) windows dos(c)copyright microsoft corp 1990-2001. c:docume1admini1debug-a0c1c:0100 mov ax,20c1c:0103 add
31、ax,ax0c1c:0105 add ax,ax0c1c:0107 add ax,ax0c1c:0109-rax=0000 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0100nv up ei pl nz na po nc0c1c:0100 b80200 mov ax,0002-tax=0002 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0103nv up ei pl nz na po nc0c1c:0103 01c0 add ax,ax-tax=0004 bx=0000 cx=0000 dx=0000 sp=ffee bp=0000 si=0000 di=0000ds=0c1c es=0c1c ss=0c1c cs=0c1c ip=0105nv up ei pl nz na po nc0c1c:0105 01c0 add ax,ax-tax=000
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1