欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:8710873       资源大小:33.69KB        全文页数:69页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、汇编语言程序设计钱晓捷课后答案汇编语言程序设计(第二版)钱晓捷习题答案第二章()(1)AX1200h (2)AX0100h (3)AX4C2Ah (4)AX3412h (5)AX4C2Ah (6)AX7856h (7)AX65B7h (1)两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为 BP (7)源操作数应为 BX+DI?(8)立即数不能作目的操作数lea bx,table;获取table的首地址,BX200H mov al,8;传送欲转换的数字,AL8 xlat;转换为格雷码

    2、,AL12H 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop bx ;DS:0f79h=8057h 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 0 0 1 0 1 AL=00h 0 1 0 0 1 W=X+Y+24-Z(1)ADD DX,BX (2)AD

    3、D AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H ;为了避免与操作数地址混淆,将题中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 - 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?

    4、 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)若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执行

    5、。 cmp di,dx? cmp dx,di jbe below_eq jae below_eq; 答:将首地址为array得20个字的数组求和,并将结果存入 total 单元中。; (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;存入

    6、dl寄. inc si mov al,buffersi;第三字节 inc si mov 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;

    7、段地址 xor si,si;地址偏移量si=0 xor dx,dx;和的高字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: in

    8、c si loop again (7) 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; 压缩BCD码加法:AXA

    9、XBX 出口参数:AXBCD码和; 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: er

    10、rmsg db Error ! Overflow !, $? mov dx,errmsg ; 错误2:缺少JMP指令 mov ah,9 int 21h ; ;.model small.stack.dataarray db 255db 0array1 db 255 dup($)array2 db 0dh,0ah,$ .code.startupmov ah,0ah ; 键盘输入字符串mov dx,offset arrayint 21hmov dx,offset array2 ; 回车换行mov ah,09hint 21hmov bx,offset array1again: mov al,bxcmp

    11、 al,$jz donecmp al,a ; 小于a和大于z的字符不是小写字母jb nextcmp al,zja nextsub al,20h ; 在a和z之间的字符才是小写字母,转换为大写mov bx,al ; 保存到原位置next: inc bxjmp againdone: mov dx,offset array1mov ah,09hint 21h.exit 0end第三章(01) ; 硬指令:每个硬指令就是一个处理器指令,在CPU执行时产生相应功能; 伪指令:伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进行汇编。; 编辑文本编辑程序汇编语言源程序.asm 汇编汇编程序目标模块

    12、文件.obj 连接连接程序可执行文件.exe或 调试调试程序应用程序; ;简化段定义格式 .model small ;定义程序的存储模式(小模式) .stack;定义堆栈段(默认1024个字节) .data;定义数据段 str1 ab Input Number:09 : ,0dh,0ah,$?str2 ab Error!,0dh,0ah,$? .cade;定义代码段? .startup;说明程序的起始点,建立ds,ss的内容。? mov ah,09h;显示str1字符串 mov dx,offset str1 int 21h gtekey: mov ah,1;调用BIOS判断按键功能 int 1

    13、6h 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 功能显示str2字符串 mov dx,offset str2 int 21h jmp getkey;等待按键 end; 汇编结束; ;stack segment dw 512 dup()

    14、 stack endsdata segmentarray db 255db 0array1 db 255 dup($)array2 db 0dh,0ah,$ data endscode segment codeassume cs:code, ds:data, ss:stackstart: mov ax,data mov ds,ax mov ah,0ah ; 键盘输入字符串mov dx,offset arrayint 21hmov dx,offset array2 ; 回车换行mov ah,09hint 21hmov bx,offset array1again: mov al,bxcmp al,

    15、$jz donecmp al,a ; 小于a和大于z的字符不是小写字母jb nextcmp al,zja nextsub al,20h ; 在a和z之间的字符才是小写字母,转换为大写mov bx,al ; 保存到原位置next: inc bxjmp againdone: mov dx,offset array1mov ah,09hint 21hmov ax,4c00hint 21hcode endsend start; (1) mov byte ptr bx,1000;1000超出了一个字节范围 (2) mov bx,offset mywordsi;寄存器的值只有程序执行时才能确定, ;而of

    16、fset是汇编过程计算偏移地址,故无法确定 ;可以改为lea bx,mywordsi (3) cmp mybyte1,mybyte2;两个都是存储单元,指令不允许 (4) mov al,mybyte1+mybyte2 ;变量值只有执行时才确定,汇编过程不能计算 (5) sub al,myword;字节量AL与字量myword,类型不匹配 (6) jnz myword;Jcc指令只有相对寻址方式,不支持间接寻址方式; 前者为“与”操作硬指令助记符,可汇编成机器代码。 后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。; 注:对于逻辑运算,有关操作数可化为二进制数。 (1)mov al,23

    17、h 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 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; 假设blo

    18、ck开始的数据块有32个字节数据: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;字节数; mydataseg segment my1b db Personal Computer my2b db 20 my3b db 14h ;20h my4b db 00010100b my5w dw 20 dup() my6c equ

    19、100 ;my6c = 100 my7c equ mydataseg ends; 段地址:表示标号所在代码段的段地址; 偏移地址:表示标号所在代码段的段内偏移地址; 类型:引用该标号时,表示它所在同一个段near类型,还是另外一个段far类型。; mydata segment ORG lO0h VARW DW l234H,5678H VARB DB 3,4 AGLIN 4 VARD DD H? EVEN BUFF DB 10 DUP() MESS DB HELLO MOV AX, OFFSET VARB + OFFSET MESS;AX = 4+16H = 1AH MOV AX, TYFE T

    20、YPE 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; 段定义伪指令段名定位组合类别组名 .CODE _TEXT WOR

    21、D PUBLIC CODE?.DATA _DATA WORD PUBLIC DATA DGROUP .STACK STACKPARA STACK STACK DGROUP ; .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 mov bx,ax .exit 0 end; stack segment para stack?dw

    22、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 cld rep stosb mov ax,4c00h int 21h code ends end start;解答;? .model small .stack 256;定义堆栈段大小为256个字节 .data anum dd h;定义两个双字的数(随意) bnum dd h sum dd ;定义结果,执行后为:h .code .startup xor si, si;相对于变量的位移量清零 mov cx, 2;分高低字分别相加,共两次 clc;清零cf again:mov ax


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开