汇编语言程序设计(钱晓捷)课后答案.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《汇编语言程序设计(钱晓捷)课后答案.pdf》由会员分享,可在线阅读,更多相关《汇编语言程序设计(钱晓捷)课后答案.pdf(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.汇编语言程序设计(第二版)钱晓捷 习题答案 第二章()2.1 (1)AX1200h (2)AX0100h (3)AX4C2Ah (4)AX3412h (5)AX4C2Ah (6)AX7856h (7)AX65B7h 2.2(1)两操作数类型不匹配 (2)IP 指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为 BP (7)源操作数应为 BX+DI (8)立即数不能作目的操作数 2.3 lea bx,table ;获取
2、 table 的首地址,BX200H mov al,8 ;传送欲转换的数字,AL8 xlat ;转换为格雷码,AL12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH 和 POP。2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop bx ;DS:0f79h=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0
3、0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.2.8 (1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中 X,Y,Z,V 字操作数改为 A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax=A*B (将操作数看作符号数,以下同)mov cx,ax
4、mov bx,dx ;bx,ax -dx,ax=A*B mov ax,Z ;ax=C cwd ;dx,ax=C (扩展符号后为双字)add cx,ax adc bx,dx ;bx,cx-bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx DI,转到 above 执行 cmp dx,di ja above ;jnbe above (2)若 AX SI,转到 greater 执行 cmp ax,si jg greater ;jnle greater (3)若 CX=0,转到 zero 执行 cmp cx,0 jcxz zero jz zero (4)若 AXS
5、I 产生溢出,转到 overflow 执行;cmp ax,di jo overflow (5)若 SIAX,转到 less_eq 执行;cmp si,ax cmp ax,si jle less_eq jge less_eq (6)若 DIDX,转到 below_eq 执行。cmp di,dx 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.cmp dx,di jbe below_eq jae below_eq 2.25;答:将首地址为 array 得 20 个字的数组求和,并将结果存入 total 单元中。2.26;(1)mov si,0 m
6、ov dl,stringsi ;第 1 个字符送 dl 寄存器 mov si,5 mov dh,stringsi ;第 6 个字符送 dh 寄存器 (2)xor si,si ;si 清零 mov al,buffersi ;第一字节 inc si mov ah,buffersi ;第二字节 mov cl,4 shl ah,cl ;BCD 码移到高半字节 or al,ah ;组合成压缩 BCD 码 mov dl,al ;存入 dl 寄.inc si mov al,buffersi ;第三字节 inc si mov ah,buffersi ;第四字节 mov cl,4 shl ah,cl ;BCD
7、码移到高半字节 or al,ah ;组合成压缩 BCD 码 mov dh,al ;存入 dh 寄.(3)test dx,0f000h jz zero mov ax,-1 jmp done zero:mov ax,0 done:ret (4)lea bx,buffer1 lea dx,buffer2 mov cx,8 ;8 个字节 xor si,si ;si=0 clc ;CF=0 (5)mov ax,0b800h mov ds,ax ;段地址 xor si,si ;地址偏移量 si=0 xor dx,dx ;和的高字 dx=0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我
8、们将竭诚为您提供优质的文档!.;.mov cx,99 ;加的次数 mov ax,si ;第一个数 again:inc si ;指向下一个字单元 inc si add ax,si ;加下一个数 jnc noc ;无进位转 inc dx ;有进位 dx=dx+1 noc:dec cx ;次数-1 jnz cx,again ;非 0 继续加 ret (6)mov si,offset string mov cx,8000h ;32k=215=8000h again:cmp si,$jnz next mov si,20h ;if si=$si-next:inc si loop again (7)xor
9、si,si ;si-0 mov cx,100 ;循环次数 again:dec arraysi dec cx jnz again (8)xor si,si ;si-0 coun:cmp stringsi,$je done inc si jmp coun done:ret 2.27;(1)使 CF0:clc ;and ax,ax ;or ax,ax (2)使 AX0:xor ax,ax ;and ax,0 ;mov ax,0 (3)同时使 AX0 和 CF0:and ax,0;xor ax,ax;sub ax,ax 2.29;压缩 BCD 码加法:AXAXBX 出口参数:AXBCD 码和 2.34
10、;okmsg db OK,$errmsg db Error!Overflow!,$mov ax,X sub ax,Y jo overflow mov dx,offset okmsg jmp next overflow:mov dx,errmsg 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.next:mov ah,9 int 21h 错误:mov ax,X sub ax,Y jo overflow mov dx,offset okmsg okmsg db OK,$mov dx,errmsg ;错误 1:数据定义在代码中 mov ah,9 i
11、nt 21h overflow:errmsg db Error!Overflow!,$mov dx,errmsg ;错误 2:缺少 JMP 指令 mov ah,9 int 21h 2.37;xt237.asm.model small.stack.data array db 255 db 0 array1 db 255 dup($)array2 db 0dh,0ah,$.code.startup mov ah,0ah ;键盘输入字符串 mov dx,offset array int 21h mov dx,offset array2;回车换行 mov ah,09h int 21h mov bx,o
12、ffset array1 again:mov al,bx cmp al,$jz done cmp al,a ;小于 a 和大于 z 的字符不是小写字母 jb next cmp al,z ja next sub al,20h ;在 a 和 z 之间的字符才是小写字母,转换为大写 mov bx,al ;保存到原位置 next:inc bx jmp again done:mov dx,offset array1 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.mov ah,09h int 21h.exit 0 end 第三章(01)3.1;硬指令:
13、每个硬指令就是一个处理器指令,在 CPU 执行时产生相应功能;伪指令:伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进行汇编。3.2;3.5;编辑 文本编辑程序 汇编语言源程序.asm 汇编 汇编程序 目标模块文件.obj 连接 连接程序 可执行文件.exe 或.com 调试 调试程序 应用程序 3.6;;xt236.asm 简化段定义格式 .model small;定义程序的存储模式(小模式).stack ;定义堆栈段(默认 1024 个字节).data ;定义数据段 str1 ab Input Number:09:,0dh,0ah,$str2 ab Error!,0dh,0ah,
14、$.cade ;定义代码段 .startup ;说明程序的起始点,建立 ds,ss 的内容。mov ah,09h ;显示 str1 字符串 mov dx,offset str1 int 21h gtekey:mov ah,1 ;调用 BIOS 判断按键功能 int 16h jz getkey ;如 zf=0,无键按下,等待 cmp al,0 ;有键按下,键值与0比较 jb error ;如 0,出错处理 cmp al,9 ;有键按下,键值与 9比较 ja error ;如 9,出错处理 mov ah,02h ;调用 DOS 显示字符功能,显示该数字 mov dl,al int 21h .exi
15、t 0 ;终止程序执行,返回 DOS error:mov ah,09h ;出错,调用 DOS 功能显示 str2 字符串 mov dx,offset str2 int 21h jmp getkey ;等待按键 end ;汇编结束 3.7;xt307.asm stack segment 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.dw 512 dup(?)stack ends data segment array db 255 db 0 array1 db 255 dup($)array2 db 0dh,0ah,$data ends cod
16、e segment code assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax mov ah,0ah ;键盘输入字符串 mov dx,offset array int 21h mov dx,offset array2;回车换行 mov ah,09h int 21h mov bx,offset array1 again:mov al,bx cmp al,$jz done cmp al,a ;小于 a 和大于 z 的字符不是小写字母 jb next cmp al,z ja next sub al,20h ;在 a 和 z 之间的
17、字符才是小写字母,转换为大写 mov bx,al ;保存到原位置 next:inc bx jmp again done:mov dx,offset array1 mov ah,09h int 21h mov ax,4c00h int 21h code ends end start 3.9;(1)mov byte ptr bx,1000 ;1000超出了一个字节范围 (2)mov bx,offset mywordsi;寄存器的值只有程序执行时才能确定,;而 offset是汇编过程计算偏移地址,故无法确定 ;可以改为 lea bx,mywordsi (3)cmp mybyte1,mybyte2 ;
18、两个都是存储单元,指令不允许 (4)mov al,mybyte1+mybyte2;变量值只有执行时才确定,汇编过程不能计欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.算 (5)sub al,myword ;字节量 AL 与字量 myword,类型不匹配 (6)jnz myword ;Jcc指令只有相对寻址方式,不支持间接寻址方式 3.10;前者为“与”操作硬指令助记符,可汇编成机器代码。后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。3.11;注:对于逻辑运算,有关操作数可化为二进制数。(1)mov al,23h AND 45h O
19、R 67h ;67h (2)mov ax,1234h/16+1Oh ;133h (3)mov ax,NOT(65535 XOR 1234h);1234h (4)mov al,LOW 1234h OR HIGH 5678h ;76h (5)mov ax,23h SHL 4 ;0234h (6)mov ax,1234h SHR 6 ;0048h (7)mov al,a AND(NOT(a-A);41h (8)mov al,H OR 00100000b ;68h (9)mov ax,(76543 LT 32768)XOR 7654h ;7654h 3.12;假设 block 开始的数据块有 32 个
20、字节数据:16 个正数+100(64h),16个负数-48(0doh)分别连续分布:block db 16 dup(100),16 dup(-48);也可以是任意字节数据,随意分布。dplus db 32 dup(?);为正数预留存储空间 dminus db 32 dup(?);为负数预留存储空间 count equ 32 ;字节数 3.15;mydataseg segment my1b db Personal Computer my2b db 20 my3b db 14h ;20h my4b db 00010100b my5w dw 20 dup(?)my6c equ 100 ;my6c=1
21、00 my7c equ mydataseg ends 3.18;段地址:表示标号所在代码段的段地址;偏移地址:表示标号所在代码段的段内偏移地址;欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.类型:引用该标号时,表示它所在同一个段near 类型,还是另外一个段far 类型。3.19;mydata segment ORG lO0h VARW DW l234H,5678H VARB DB 3,4 AGLIN 4 VARD DD 12345678H EVEN BUFF DB 10 DUP(?)MESS DB HELLO MOV AX,OFFSET
22、VARB+OFFSET MESS ;AX=4+16H=1AH MOV AX,TYFE TYPE BUFF+TYPE MESS+TYPE VARD;AX=1+1+4=06H MOV AX,SIZE VARW+SIZE BUFF+SIZE MESS;AX=4+10+5=19=13H MOV AX,LENGTH VARW+LENGTH VARD ;AX=2+1=03H MOV AX,LENGTH BUFF+SIZE VARW ;AX=10+4=14=0EH MOV AX,TYPE BIGIN ;AX=FF02H(近)MOV AX,OFFSET BEGIN ;AX=1BH 3.22;段定义伪指令 段名
23、 定位 组合 类别 组名 .CODE _TEXT WORD PUBLIC CODE .DATA _DATA WORD PUBLIC DATA DGROUP .STACK STACK PARA STACK STACK DGROUP 3.25;.model small .stack .data num equ 5 datalist dw-1,0,2,5,4,?.code .startup mov bx,offset datalist mov cx,num xor ax,ax again:add ax,bx inc bx inc bx loop again 欢迎您阅读并下载本文档,本文档来源于互联网
24、,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.mov bx,ax .exit 0 end 3.26;stack segment para stack dw 512 dup(?)stack ends data segment dword array db 100 dup(?)data ends code segment code assume cs:code,ds:data,es:data,ss:stack org 100h start:mov ax,data mov ds,ax mov es,ax mov di,offset array mov al,64h mov cx,100
25、cld rep stosb mov ax,4c00h int 21h code ends end start 3.27;解答 ;xt327.asm .model small .stack 256 ;定义堆栈段大小为 256 个字节 .data anum dd 11223344h ;定义两个双字的数(随意)bnum dd 77553311h sum dd?;定义结果,执行后为:88776655h .code .startup xor si,si ;相对于变量的位移量清零 mov cx,2 ;分高低字分别相加,共两次 clc ;清零 cf again:mov ax,anumsi ;取第一个数的一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 钱晓捷 课后 答案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内