ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:18.83KB ,
资源ID:5778111      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5778111.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言程序设计钱晓捷课后答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言程序设计钱晓捷课后答案.docx

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 ;获取table的首地址,

2、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 0 1 AL=0ffh

3、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 mov bx,dx ;bx,ax DI,转到above执行 cmp dx,di ja above ;jnbe above

4、(2)若AX SI,转到greater执行 cmp ax,si jg greater ;jnle greater (3)若CX = 0,转到zero执行 cmp cx,0 jcxz zero jz zero (4)若AXSI产生溢出,转到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; 答:将首地址

5、为array得20个字的数组求和,并将结果存入total 单元中。 2.26; (1) mov si,0 mov 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

6、ah,buffersi ;第四字节 mov cl,4 shl ah,cl ;BCD码移到高半字节 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 ;和的

7、高字dx=0 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)

8、xor 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 出口参数:AXB

9、CD码和 2.34; 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 int 21h overflow: errmsg

10、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,offset a

11、rray1 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; 硬指令:每个硬指令就是一个处理器指令,在CPU执行时产生相应功能;伪指令:伪指令并不产生处理器指令,它通常用于辅助汇编程

12、序对源程序进行汇编。 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,?$? .cade ;定义代码段 .startup ;说明程序的起始点,建立ds,ss的内容。 mov a

13、h,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 .exit 0 ;终止程序执行,返回DOS error: mov ah,09h ;出错,调用DOS 功能显示s

14、tr2字符串 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 code segment code assume cs:code, ds:data, ss:stack start: mov ax,data mov ds,ax mov ah,0ah ; 键盘输入字符串

15、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之间的字符才是小写字母,转换为大写 mov bx,al ; 保存到原位置 next: inc bx jmp again done: mov dx,offset array1 mov ah,09h in

16、t 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 ;两个都是存储单元,指令不允许 (4) mov al,mybyte1+mybyte2 ;变量值只有执行时才确定,汇编过程不能计算 (5) sub al,myword ;字节量AL与字量m

17、yword,类型不匹配(6) jnz myword ;Jcc指令只有相对寻址方式,不支持间接寻址方式 3.10; 前者为“与”操作硬指令助记符,可汇编成机器代码。 后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。 3.11; 注:对于逻辑运算,有关操作数可化为二进制数。 (1)mov al,23h AND 45h OR 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

18、 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个字节数据:16个正数+100 (64h),16个负数 -48 (0doh) 分别连续分布: block db 16 dup(100),16 dup(-48);也可以是任意字节数据,随意分布。 dplus db 32 dup(?) ;为正数预留存储空

19、间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 = 100 my7c equ mydataseg ends 3.18; 段地址:表示标号所在代码段的段地址; 偏移地址:表示标号所在代码段的段内偏移地址; 类型:引用该标号时,表示它所在同一个段near类型,还是另外一个段far类型。

20、 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 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 MO

21、V 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; 段定义伪指令段名定位组合类别组名 .CODE _TEXT WORD PUBLIC CODE .DATA _DATA WORD PUBLIC DATA DGROUP .STACK STACK PARA STACK STACK DGROUP 3.25; .model

22、 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 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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1