




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计 第二版 钱晓捷 习题答案汇编语言程序设计 第二版 钱晓捷 习题答案 第二章 第二章 2 1 1 AX 1200h 2 AX 0100h 3 AX 4C2Ah 4 AX 3412h 5 AX 4C2Ah 6 AX 7856h 7 AX 65B7h 2 2 1 两操作数类型不匹配 2 IP 指令指针禁止用户访问 3 立即数不允许传给段寄存器 4 段寄存器之间不允许传送 5 两操作数类型不匹配 6 目的操作数应为 BP 7 源操作数应为 BX DI 8 立即数不能作目的操作数 2 3 lea bx table 获取 table 的首地址 BX 200H mov al 8 传送欲转换的数字 AL 8 xlat 转换为格雷码 AL 12H 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 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 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 若 AX SI 产生溢出 转到 overflow 执行 cmp ax di jo overflow 5 若 SI AX 转到 less eq 执行 cmp si ax cmp ax si jle less eq jge less eq 6 若 DI DX 转到 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 mov dl string si 第 1 个字符送 dl 寄存器 mov si 5 mov dh string si 第 6 个字符送 dh 寄存器 2 xor si si si 清零 mov al buffer si 第一字节 inc si mov ah buffer si 第二字节 mov cl 4 shl ah cl BCD 码移到高半字节 or al ah 组合成压缩 BCD 码 mov dl al 存入 dl 寄 inc si mov al buffer si 第三字节 inc si mov ah buffer si 第四字节 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 和的高字 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 2 15 8000h again cmp si jnz next mov si 20h if si si next inc si loop again 7 xor si si si 0 mov cx 100 循环次数 again dec array si dec cx jnz again 8 xor si si si 0 coun cmp string si je done inc si jmp coun done ret 2 27 1 使 CF 0 clc and ax ax or ax ax 2 使 AX 0 xor ax ax and ax 0 mov ax 0 3 同时使 AX 0 和 CF 0 and ax 0 xor ax ax sub ax ax 2 29 压缩 BCD 码加法 AX AX BX 出口参数 AX BCD 码和 2 24 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 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 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 硬指令 每个硬指令就是一个处理器指令 在 CPU 执行时产生相应功能 伪指令 伪指令并不产生处理器指令 它通常用于辅助汇编程序对源程序进行汇 编 3 2 3 5 编辑 文本编辑程序 汇编语言源程序 asm 汇编 汇编程序 目标模块文件 obj 连接 连接程序 可执行文件 exe 或 com 调试 调试程序 应用程序 3 6 xt236 asm 简化段定义格式 model small 定义程序的存储模式 小模式 stack 定义堆栈段 默认 1024 个字节 data 定义数据段 str1 ab Input Number 0 9 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 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 功能显示 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 code 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 之间的字符才是小写字母 转换为大写 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 myword si 寄存器的值只有程序执行时才能确定 而 offset 是汇编过程计算偏移地址 故无法确定 可以改为 lea bx myword si 3 cmp mybyte1 mybyte2 两个都是存储单元 指令不允许 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 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 3 12 假设 block 开始的数据块有 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 字节数 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 类型 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 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 段定义伪指令 段名 定位 组合 类别 组名 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 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 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 anum si 取第一个数的一个字 先低字 后高字 adc ax bnum si 取第二个数的一个字 先低字后 高字 mov sum si ax 存和的一个字 先低字后高字 inc si 修改位移量指向下一个字 加 2 inc si loop again cx cx 1 if cx0 jump again exit 0 end 3 28 startup xor si si 位移量清零 mov al bdata si 取第一个数 课后答案网 课后答案网 mov cx num 1 累加次数 again inc si 指向下一个数 adc al bdata si 累加 loop again 如未完 继续累加 mov sum al 完了 存结果 exit 0 end 4 3 思路 设这四组从低位到高位分别放在 AL BL CL 和 DL 寄存器中 这 里仅列出代码段 mov bl al 将 al 中的两组分开 and al 0fh 屏蔽高四位后送 al mov cl 4 原 al 中的数据逻辑右移 4 次送 bl shr bl cl mov dl ah 将 ah 中的两组分开 and dl 0f0h 屏蔽低高四位后送 dl mov cl 4 原 ah 中的数据逻辑右移 4 次送 dl shr dl cl mov cl ah 屏蔽高四位后送 cl and cl 0fh 4 4 getkey mov ah 1 从键盘输入 出口 al 存键值 int 21h cmp al a 判键值是小写字母 jb getkay cmp al z ja getkay sub al 20h 是小写字母转换为大写字母 mov ah 09h 显示 int 21h 4 8 1 将 jmp table bx 指令改为 mov dx table bx 2 去掉源程序中 exit 0 end 之间的语句 4 17 model small stack 256 data stri1 db please input number 1 9 odh oah code startup again mov dx offset stri1 显示 stri1 提示输入 mov ah 09h int 21h mov ah 01h 调用输入一个字符 int 21h 输入一个字符存在 al 中 cmp al 1 判该字符 如不在 1 9 jb again 重新输入 课后答案网 课后答案网 cmp al 9 ja again and al 0fh 在 1 9 屏蔽高 4 位 mov cx al 振铃次数送 cx repeat mov dl 07h 调用一次振铃 mov ah 02h int 21h mov dx 0ffffh 延时 abc dec dx jnz abc untilcxz cx cx 1 cx 0 退出 exit 0 end 4 22 crazy PROC crazy PROC push ax xor ax ax xor ax ax xor dx dx xor dx dx again add ax bx again add ax bx adc dx 0 adc dx 0 inc bx inc bx inc bx inc bx loop again loop again ret ret ENDP crazy crazy ENDP 4 25 子程序中又调用子程序就形成子程序嵌套 子程序中直接或间接调用该子程序本身就形成子程序递归 4 26 model small stack 256 data stdng db HeLLO eveRyboDy 0 code startup mov bx offset atring again mov al bx call chan 调用过程 mov bx al next inc bx jmp again done exit 0 chan proc 大写转换为小写字母的过程 or al al jz done cmp al A 课后答案网 课后答案网 jb next cmp al Z ja next or al 20h ret chan endp end 4 27 astob proc and dh 0fh 十位数的 ASCII 码转为二进制数 mov al dh mul 10 al 10 dh and dl 0fh 个位数的 ASCII 码转为二进制数 add al dl al 10 dh dl ret astob endp 5 1 cmp X 5 je abc jmp done abc cmp ax bx jne cde jmp done cde inc ax done 5 2 cmp X 5 je abc jmp done cmp ax bx jne abc jmp done abc inc ax done 5 4 宏定义采用一对伪指令实现 格式如下 其中方括号表示可选 宏名 macro 形参表 宏定义体 endm 宏调用时 利用宏名带上实参即可 格式如下 宏名 实参表 5 6 宏的参数功能非常强大 即可以没有参数 也可以带有一个或多个参数 而且参数的形式非常灵活 可以是常量 变量 存储单元 指令或它们的一部分 还可以是表达式等 宏展开时的形参与实参结合是用位置匹配的实参对形参进行取代 实参个数与 课后答案网 课后答案网 形参个数不同时 多余的实参没有作用 缺少的实参则用空格代替 取代时 不 进行有效性等检查 5 7 宏汇编的特点是在汇编阶段进行语句展开 无需返回 不减少目标程序代 码 执行速度没有改变 通过形参 实参结合传递参数 宏汇编适合于程序段较 短或要求执行速度快的场合 子程序在执行阶段需要由主程序执行调用指令 CALL 进行调用 进而转入子程 序执行 子程序执行结束执行返回指令 RET 返回主程序 子程序如果被多次使 用 则会减少目标程序代码 主程序与子程序之间主要采用寄存器 存储单元 堆栈等传递参数 子程序适合于程序段较长或为减少目标代码的场合 5 9 shrot word ptr bx 4 ror 1 push cx 1 mov cl 4 1 ror word ptr bx cl 1 pop cx 5 10 logical macro lcode dopd sopd lcode dopd sopd endm 例如 如果使用 and ax bx 指令 可以利用该宏定义 写出宏指令如下 logical and ax bx 初看起来 这个问题似乎比较难解决 实际上 这 4 条逻辑指令都具有相同的指 令操作数格式 所以可以归纳为如上宏定义 5 12 move MACRO doprnd soprnd push ax mov ax soprnd mov doprnd ax pop ax ENDM 第五 章 02 5 13 解答解答 movstr strN dstr sstr lea si sstr lea di dstr mov cx strN cld rep movsb endm 5 14 ABSDIF Pl P2 DISTANCE ABSDIF BX SI DI 1 push ax 答 1 push ax 课后答案网 课后答案网 1 mov ax P1 1 mov ax bx 1 sub ax P2 1 sub ax si 1 cmp ax 0 1 cmp ax 0 1 jge 0000 1 jge 0000 1 neg ax 1 neg ax 1 0000 1 0000 1 mov DISTANCE ax 1 mov di ax 1 pop ax 1 pop ax 5 15 wtemp 2 repeat 100 dw 0 dw wtemp wtemp wtemp 2 endm 5 18 DOS21H MACRO callnum calladdress mov ah callnum ifnb mov dx calladdress endif int 21h ENDM 5 22 1 编写主程序 并进行汇编产生 OBJ 模块 2 编写独立的子程序 也进行汇编产生 OBJ 模块 3 分别编写主程序与子程序时 需要处理好共用变量 过程 逻辑段属性 参数 传递等问题 4 利用连接程序将主程序模块和子程序模块连接起来 形成完整的可执行程序 5 28 数据段 table dw 2277 2138 1808 1709 1522 1356 1208 1139 对应中音 1 7 和高音 i 的定时器记数值 代码段 mov al 0b6h 设置定时器 2 工作方式 out 43h al again mov ah 1 等待按键 int 21h cmp al 1 判断是否为数字 1 8 jb next cmp al 8 ja next sub al 30h 1 8 的 ASCII 码转换为二进制数 sub al 1 课后答案网 课后答案网 再减 1 将数字 1 8 变为 0 7 以便查表 xor ah ah shl ax 1 乘以 2 mov bx ax 记数值表是 16 位数据 无法采用 xlat 指令 mov ax table bx 取出对应的记数值 out 42h al 设置定时器 2 的记数值 mov al ah out 42h al in al 61h 打开扬声器声音 or al 03h 使 D1D0 PB1PB0 11b 其他位不变 out 61h al jmp again 连续发声 直到按下另一个键 next push ax in al 61h 不是数字 1 8 则关闭扬声器声音 and al 0fch 使 D1D0 PB1PB0 00b 其他位不变 out 61h al pop ax cmp al 1bh 判断是否为 ESC 键 对应 ASCII 码 1bh jne again 不是 ESC 继续 否则程序执行结束 1 1 立即寻 址 没有 2 直接寻 址 7237H 3 使用 BX 的寄存器寻址 没 有 4 使用 BX 的间接寻 址 637DH 5 使用 BX 的寄存器相对寻址 0D5F0H 6 基址变址寻 址 8E18H 课后答案网 课后答案网 7 相对基址变 址 004FH 2 根据下列要求 写出相应的汇编指令 1 ADD DX BX 2 ADD AL BX SI 3 ADD BX 0B2H CX 4 MOV AX 2A59H ADD 0524H AX 5 ADD AL 0B5H 3 1 寄存器间接寻址 MOV BX OFFSET BLOCK ADD BX OAH MOV DX BX 2 寄存器相对寻址 MOV BX 0AH MOV DX BLOCK BX 3 基址变址寻址 MOV BX OFFSET BLOCK MOV SI OAH MOV DX BX SI 4 现有 DS 2000H BX 0100H SI 0002H 20100 12H 20101 34H 20102 56H 201 03 78H 21200 2AH 20201 4CH 21202 B7H 21203 65H 试说明下列各 条指令执行完后 AX 寄存器的内容 课后答案网 课后答案网 1 MOV AX 1200H 1200H 2 MOV AX BX 0100H 3 MOV AX 1200 4C2AH 4 MOV AX BX 3412H 5 MOV 1100 BX 4C2AH 6 MOV AX BX SI 7856H 7 MOV AX 1100 BX SI 6 5B7H 5 1 7CD9H 2 212A0 1200 H 0600H 3 212A0H 1200H 5119H H 098AH 6 MOV BX 2000H 或 LES BX 2000 LES DI BX MOV AX ES BX MOV AX ES DI 7 转向地址 OBJ 的值分别为 1 064DH 2 0691H 3 05ECH 注意有符号数的符号位 8 1 MOV AX 0ABH 立即数寻 址 无物理地址 2 MOV AX BX 寄存器寻 址 同上 3 MOV AX 100 直接寻 址 20100H 课后答案网 课后答案网 4 MOV AX VAL 直接寻 址 20050H 5 MOV AX BX 寄存器间接寻 址 20100H 6 MOV AX ES BX 直接寻 址 21100H 7 MOV AX BP 寄存器间接寻 址 20010H 8 MOV AX SI 同 上 200A0H 9 MOV AX BX 10 寄存器相对寻 址 20110H 10 MOV AX VAL BX 同 上 20150H 11 MOV AX BX SI 基址变址寻 址 201A0H 12 MOV AX VAL BX SI 相对基相变址寻 址 201F0H 9 1 的指 令 MOV AX BX 0CH MOV ZREO AX 2 的指令 MOV AX ARRAY BX MOV ZREO AX 10 MOV AX TABLE 是把符号地址 TABLE 里的内容送到 AX 里 指令执行 完后 AX 1234H LEA AX TABLE 是把符号地址 TABLE 的有效地址 这里是偏移 量 送到指定寄存器 AX 里 指 令执行完后 AX 0032H 11 执行完指令后 AX 1E00H 12 LEA AX CSTRING 课后答案网 课后答案网 MOV DL AX MOV DH AX 6 13 这个嘛不想做了 麻烦啊 14 LES BX 2000 MOV AX ES BX 注意 一开始我写的是 MOV AX ES 8000H 后来看到题目里要求写两 条指令 所以一条就不行了 就要画蛇添足 15 运算结 果 SF ZF CF OF 各位的值 从左至右依次往下 1 74D4H 0 0 0 0 2 A5C1H 1 0 0 1 3 4240 H 0 0 1 0 4 0000 H 0 1 1 0 16 接上表 1 5D14 0 0 0 0 2 A870 1 0 0 1 3 D870 1 0 0 0 4 34E4 0 0 1 0 17 1 MOV AX Z 把 Z 送到 AX 课后答案网 课后答案网 SUB AX X Z X ADD AX W W Z X MOV Z AX 结果保存在 Z 中 2 MOV AX R R 送到 AX 中 ADD AX 9 R 9 MOV BX X X 送到 BX 中 ADD BX 6 X 6 ADD AX BX R 9 X 6 结果保存在 AX 中 MOV BX W W 送到 BX 中 SUB BX AX W R 9 X 6 连续减去两个数 相当于减去这两个 数的和 MOV Z BX 最终结果送到 Z 中 3 MOV AX W 把 W 送到 AX IMUL X W X 注意 低十六位保存 在 AX 里 高十六位保存在 DX 里 MOV BX Y 把 Y 送到 BX 里 ADD BX 6 Y 6 IDIV BX W X Y 6 注意 商保存在 AX 里 余数保存在 DX 里 MOV Z AX 把商送到 Z 中 MOV R DX 把余数 送到 R 中 4 MOV AX W 把 W 送到 AX 中 SUB AX X W X 课后答案网 课后答案网 CWD 把 AX 中的十六位带符号数扩展成为 32 位 低十六位保存在 AX 中 高十六位保 在 DX 中 MOV BX 5 把 5 送到 BX 中 IDIV BX W X 5 被除数为 32 位 除 数为 16 位 商为 16 位 IMUL Y 上一步结果再乖以 Y 积为 32 位 MOV BX 2 把 2 送到 BX 中 IMUL BX 上一步乘法所得的积再乘以 2 各为 64 位 MOV Z EAX 把结果中低 32 位放入 Z 双字单元中 MOV Z 4 EDX 把结果中高 32 位放入 Z 4 双字单元中 18 指令 本条指令执行完后 AX 的内 容 执行完后 CF SF ZF 的值 MOV AX 1234H 1234H 0 0 0 MOV CL 4 1234H 0 0 0 ROL AX CL 2341H 1 0 0 DEC AX 2340H 1 0 0 MOV CX 4 2340H 1 0 0 MUL CX 8918H 0 0 0 INT 20H 课后答案网 课后答案网 程序结束后 AX 8918H DX 0000H 19 指令 执行完后 AX 的内 容 执行完后 CF SF ZF 和 OF 的值 MOV AX 0 0 0010 DEC AX FFFFH 0100 ADD AX 7FFFH 7FFEH 0000 ADD AX 2 8000H 0101 NOT AX 7FFFH 0101 SUB AX 0FFFFH 8000H 1101 ADD AX 8000H 0000H 1011 SUB AX 1 FFFFH 1101 AND AX 58D1H 58D1H 0000 SAL AX 1 B1A2H 0101 SAR AX 1 D8D1H 0100 NEG AX 272FH 1000 ROR AX 1 9397H 1001 课后答案网 课后答案网 20 1 MOV AX DATAX ADD DATAY AX 2 MOV AX DATAX ADD DATAY AX MOV AX DATAX 2 ADD DATAY 2 AX 3 本組指令的作用是 BX DATAX DATAY 1 CF 的值 帶 進位加法 4 MOV AX DATAX MUL DATAY 結果的高十六位保存在 DX 裏 低十六 位保存在 AX 裏 5 MOV AX DATAX MOV DX DATAX 2 MUL DWORD DATAY 結果的高三十二位保存在 EDX 裏 低三十 二位保存在 EAX 裏 這裏所用的 DWORD 為一屬性操作符 在第四章會學到 6 MOV AX DATAX DIV 17H 結果商保存在 AL 中 余數在 AH 中 7 MOV AX DATAX CDW DIV DATAY 21 NEG DX NEG AX 课后答案网 课后答案网 SBB DX 0 22 MOV AX A 把雙字長數的低字放到 AX 中 MOV DX A 2 把雙字長數的高字放到 DX 中 TEST DX 8000H 測試雙字長數的符號 JZ RIGHT 如果是非負數 則直接保存 NEG DX 如果是負數 則求補 NEG AX SBB DX 0 RIGHT MOV B AX MOV B 2 DX 1 指令下列指令的错误 1 MOV AH BX 源操作数与目的操作数长度不相同 2 MOV BX SI 这是两个内存单元在传递数据 而这在汇编语言中是 不允许的 3 MOV AX SI DI 不能用两个变址连用 其中一个应为基址 4 MOV MYDAT BX SI ES AX 同 2 5 MOV BYTE PTR BX 1000 必须有一个为寄存器 6 MOV BX OFFSET MYDAT SI OFFSET 不能与复杂操作数相连 7 MOV CS AX 不能对 CS 赋值 8 MOV ECX AX 操作数类型不同 2 1 合法 2 非法 3 非法 4 非法 3 1 非法 操作数类型不同 2 合法 课后答案网 课后答案网 3 非法 不允许两个内存单元直接传递数据 你把人家 CPU 放哪了 呵 4 合法 5 合法 6 合法 7 非法 必须有一个寄存器 把 CPU 放哪了 8 非法 两个内存单元地址相加没有意义 9 合法 10 非法 同 3 4 1 两内存单元传递数据 2 操作数类型不同 3 跳转指令只能跳转到符号地址 4 转移指令后不能为变量 只能为标号 5 格式不对 应为 NEAR PTR 5 图 就不画了 6 1 DW 5150H 2 MOV AX 5150H MOV ADDRESS AX 等 写出几个就可以 7 DATASG SEGMENT FLD1B DB personal computer FLD2B DB 10 DUP 32 FLD3B DB 20H FLD4B DB 01011001B 课后答案网 课后答案网 FLD5B DB 32654 FLD6B DB 10 DUP 0 FLD7B DB PART1 DUP 20 PART2 DUP 50 PART3 DUP 14 FLD1W DW 0FFF0H FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5 6 7 8 9 FLD5W DW 5 DUP 0 FLD6W DW FLD6W FLD1W FLD7B FLD1B 8 PLENTH 的值为 22 GE 表示该数据段的长度 9 L 的值为 7 10 1 MOV AX OFFSET LNAME 2 MOV SI WORD PTR CODE LIST 3 CODE LENGHT EQU CODE LIST 11 代码如下 DATA SEG SEGMENT DB 5 DATA LIST DW 0FFFFH 0 2 5 4 5 DUP DATA SEG ENDS CODE SEG SEGMENT ASSUME CS CODE SEG DS DATA SEG MOV AX 5 MOV MAX AX 课后答案网 课后答案网 MOV AX 0FFFFH MOV MIN AX CODE SEG ENDS 12 1 10025 2 19 3 2548 4 3 5 103 6 0FFFFH 7 1 8 3 13 分别汇编成为 MOV AX 0AH MOV BL 0AH MOV CL 1 14 1 AX 1 2 AX 2 3 CX 14H 4 DX 32H 5 CX 1 15 1 操作符错误 改为 DATA SEG SEGMENT 2 缺少段名 在前面加个段名 3 引用应该从 开始 把那个 改成 4 结构混乱 改为 MAIN PROC PROC FAR MAIN PROC ENDP 课后答案网 课后答案网 END 16 程序框架如下 DATA SEG SEGMENT 定義數據段 ORG 0E000H 讓下一字節 地址為 0E000H FIRST TYPE EQU THIS WORD 建立一個與下一存儲單元有相同段地 址和偏移地址的操作數 DATA GROUP DB 100 DUP 給 DATA GROUP 分配 100 個字 節的空間 DATA SEG ENDS 數據段結束 STACK SEG SEGMENT 定義堆棧段 ALIGN 16 讓下一 字節從小段首地址開始 STACK DB 100 DUP 為堆棧分配空間 STACK SEG ENDS CODE SEG SEGMENT ASSUME CS CODE SEG DS DATA SEG SS STACK SEG ORG 1000H 讓下條 指令的第一個字節從 1000H 開始 START MOV AX DATA SEG MOV DS AX MOV AX STACK SEG MOV SS AX CODE SEG ENDS END START 結束 课后答案网 课后答案网 17 程序如下 D SEG SEGMENT 数据段定义 AUGEND DD 99251 D SEG ENDS E SEG SEGMENT 附加段定义 ADDEND DD 15926 E SEG ENDS C SEG SEGMENT 代码段定义 ASSUME CS C SEG DS D SEG ES E SEG START MOV AX D SEG MOV DS AX MOV AX E SEG MOV ES AX MOV EAX DS AUGEND ADD EAX ES ADDEND MOV DS SUM EAX C SEG ENDS END START 结束 18 19 需要加上 PTR 伪操作的有 3 4 2 不需要加 因为 BX 自动转化为字节类型 5 1 试编写一个汇编语言程序 要求对键盘输入的小写字母用大写字母显示出来 model small stack 100H code 课后答案网 课后答案网 main proc far Start push dx mov ax 0 push ax mov ah 01H int 21H cmp al 61H jl lop1 cmp al 7BH jge lop1 sub al 20H mov dl al lop1 mov ah 2 int 21H ret End start 5 2 编写一个程序 从键盘接受一个小写字母 然后找出它的前导字符和后续字 符 再按顺序显示这三个字符 model small 386 code MAIN PROC FAR start push ds sub ax ax push ax input mov ah 7H int 21H cmpe cmp al 20H JE exit 课后答案网 课后答案网 cmp al 61H JL input cmp al 7AH JG input print sub al 01H mov dl al mov ah 02H int 21H add al 01H mov dl al mov ah 02H int 21H add al 01H mov dl al mov ah 02H int 21H 输出换行回车 mov dl 0AH mov ah 02H int 21H jmp input exit ret MAIN ENDP END start 5 3 将 AX 寄存器中的 16 位数分成 4 组 每组 4 位 然后把这四组数分别放在 AL BL CL DL 中 model small data x DB 4 dup stack 100H code MAIN PROC FAR start push ds and ax 00H push ax 课后答案网 课后答案网 mov ax 1234H mov cx 04H mov si 00H lop push cx mov cl 04H rol ax cl push ax and al 0FH mov BYTE PTR x si al pop ax pop cx add si 2 Loop lop mov al X mov bl X 2 mov cl X 4 mov dl X 6 print mov ah 02H int 21H mov dl al mov ah 02H int 21H mov dl bl mov ah 02H int 21H mov dl cl mov ah 02H int 21H exi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南普洱市广播电视局招聘2人备考练习题库及答案解析
- 2025年广东广州市增城区合生育才学校招聘非编制教师1人(第三次)备考练习试题及答案解析
- 2025年金属爆炸焊接行业研究报告及未来行业发展趋势预测
- 2025年3-羟基苯乙酮行业研究报告及未来行业发展趋势预测
- 回转窑球团焙烧工职业考核试卷及答案
- 球团原料工特殊工艺考核试卷及答案
- 2025年厨房橱柜行业研究报告及未来行业发展趋势预测
- 烧结配料工工艺创新考核试卷及答案
- 2025年LCP树脂材料行业研究报告及未来行业发展趋势预测
- 2025年充电模块行业研究报告及未来行业发展趋势预测
- 地理第一章 地球单元检测卷-2024-2025学年七年级地理上学期(2024)人教版
- 2024年九年级化学上册暑假提升讲义(沪教版)认识化学科学(解析版)
- 用户体验 智能座舱人机界面评测规范-意见征求稿-2024-07-技术资料
- 建筑工程资料承包合同范本
- DB14-T 2490-2022 集装箱式锂离子电池储能电站防火规范
- 中压交联工序工艺培训
- 水质采样记录表
- 安克创新招聘测评题答案
- 一年级上册道法教学计划
- 招租写字楼方案
- 人类群星闪耀时
评论
0/150
提交评论