IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社).pdf_第1页
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社).pdf_第2页
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社).pdf_第3页
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社).pdf_第4页
IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社).pdf_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微信 332107782 IBM PC 汇编语言程序设计 第二版 课后习题答案 清华大学出版社 沈美明 温冬蝉著 第二章 1 解答 有 256 个 2 解答 如下图 第一个络子为 000B0H 字单元 注意 是字单元 第五个格子为 000B3H 字单元 E5 1E 3C 2A 3 解答 30022H 字节单元内容 ABH 30024H 字节单元内容 EFH 30021H 字单元内容 AB34H 30022H 字单元内容 CDABH 4 解答 这三个物理地址都是 3017AH 说明了不同的段地址和偏移地址对应同一物理地址 5 解答 CS IP 第一个字的物理地址为 0AAA40H 6 解答 条件标志 OF SF ZF CF 的值依次为 0 0 0 0 7 下列操作可使用那些寄存器 1 加法和减法 AX BX CX DX 当然 还有这几个通用寄存器的高低位了 如 AH AL 等 2 循环计数 CX 3 乘法和除法 DX AX AH AL 4 保存段地址 CS DS ES SS 5 表示运算结果为 O FLAGS 6 将要执行的指令地址 IP 7 将要从堆栈取出数据的地址 BP SP SS 8 可以用来指示存储器地址的寄存器有 BX SP BP DI CS DS SI ES SS IP 9 一一对应 5 A 4 B 2 C 3 D 12 E 9 F 11 G 10 H 13 I 8 J 7 K 6 L 1 M 15 N 14 O 第三章 1 1 立即寻址 没有 2 直接寻址 7237H 3 使用 BX 的寄存器寻址 没有 4 使用 BX 的间接寻址 637DH 5 使用 BX 的寄存器相对寻址 0D5B4H 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 微信 332107782 3 1 寄存器间接寻址 MOV BX OFFSET BLOCK 0AH MOV DX BX 2 寄存器相对寻址 MOV SI OAH MOV DX BLOCK SI 3 基址变址寻址 MOV BX BLOCK MOV SI OAH MOV DX BX SI 4 现有 DS 2000H BX 0100H SI 0002H 20100 12H 20101 34H 20102 56H 20103 78H 2120 0 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 65B7H 5 1 7CD9H 2 0600H 3 098AH 6 MOV BX 2000H LES DI BX MOV AX ES DI 7 转向地址 OBJ 的值分别为 1 064DH 2 0691H 3 05E0H 注意有符号数的符号位 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 微信 332107782 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 课本上 P51 P53 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 4240H 0 0 1 0 4 0000H 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 中 微信 332107782 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 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 微信 332107782 MUL DATAY 結果的高十六位保存在 DX 裏 低十六位保存在 AX 裏 5 MOV AX DATAX MOV DX DATAX 2 MUL DWORD DATAY 結果的高三十二位保存在 EDX 裏 低三十二位保存在 EAX 裏 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 23 每條指令單獨執行完後的結果依次為 1 9AH 2 61H 3 0FBH 4 1CH 5 0 6 0E3H 24 執行指令序列後 BX 的內容為 0DAH 25 1 把 53D 乘以 2 的程序 MOV AX 35H 53D 35H SHL AX 1 2 把 53 除以 2 的程序 MOV AX 35H SHR AX 1 26 這段程序完成的功能是 把 DX AX 中的雙字數據左移 4 位 相當於乘以 16D 27 各條指令單獨執行後 DX 的值依次為 1 5CH 2 17H 3 05C8H 4 72H 5 2017H 6 0CDH 7 0172H 8 05CCH 9 0DCH 28 該程序段執行完後 BX 寄存器的內容是 C02DH 29 1 从左到右把 CONMAE 中的字符串伟送到 PRLINE 的程序实现 LEA SI CONAME 把 CONAME 中第一个字节的偏移地址送到 SI 中 LEA DI PRLINE 把 PRLINE 中第一个字节 的偏移地址送到 DI 中 MOV CX 20 把重复次数放到 CX 里 CLD 让 SI DI 从低地址指向高地址 即从左到右传送 REP MOVSB 传送 微信 332107782 2 从右到左把 CONMAE 中的字符串传送到 PRLINE 中的程序实现 LEA SI CONAME LEA DI PRLINE MOV CX 20 STD 和上面唯一不同的就是这次是从右到左 所以要从高地址批向低地址 REP MOVSB 3 把 CONAME 中的第三和第四個字節裝入 AX 的程序實現 LEA SI CONAME 3 LODSW 4 把 AX 寄存器的內容存入從 PRLINE 5 開始的字節中的程序實現 LEA DI PRLINE 5 STOSW 5 檢查 CONAME 字符串中有無空格字符 如有把它偉送給 BH 寄存器的程序實現 LEA DI CONAME 把 CONAME 中第一個字符偏移地址放入 DI 中 MOV CX 20 把重複次數放到 CX 中 MOV AL 20H 把空格符的 ASCII 值放入 AL 中 CLD 從低到高 REPNE SCASB 比較 MOV BH DI 1 R 把檢查到的空格符送到 BH 中 30 MOV CX 12H 把重複次數放到 CX 中 這裏用十六進制表示 MOV SI 0 初始化 SI MOV AX 26H 把用于存放负数的最大容量为 20 的数组 p db 20 0 20 dup 同上 用于存放正数 code main proc far start mov ax data mov ds ax call check store 判斷數的正負並存入相應數組 call display 在屏幕上顯示 main endp check store proc near push ax push bx push cx mov cx 20 循環次數放入 CX cld 使 SI 向增加的方向移動 lea si m M 的偏移地址放入 SI again mov al si M 中的數依次放入 AL 中 cmp al 0 並且依次和 0 比較 jl store in n 如果小於 0 則存入負數組 jg store in p 如果大於 0 剛存入正數組 dec cx 微信 332107782 jnz again jz exit store in n push bx mov bl n 1 N 中已有數的個數放入 BL 中 mov n bl 1 al 把 AL 中負數存入數組 N 的最後一個數字的下一字節 pop bx jmp again store in p STORE IN P push bx mov bl p 1 mov p bl 1 al pop bx jmp again exit pop cx pop bx pop ax ret check store endp display proc near push cx lea si n 2 mov cl n 1 數組 N 中數的個數放入 CL cld mov ah 2 re display n 依次顯示各個負數 mov dl si int 21h mov dl 20h 各個數之間用空格間隔 int 21h dec cl jnz re display n 下面四行用來回車和換行 mov dl 0dh int 21h mov dl 0ah int 21h 同上面負數的顯示 lea si p 2 mov ch p 1 cld re display p 微信 332107782 mov dl si int 21h mov dl 20h int 21h dec ch jnz re display p pop cx ret display endp end start 7 程序實現 未調試 model small data data db 100d dup 100 個數 code start mov ax data mov ds ax mov cx 101d 循環次數 mov bl 0feh 初始化 BX 為最大的八位無符號正數 mov si offset data cld again dec cx jz finish 全部判斷完成 mov al si cbw div 2 每個數除以 2 cmp al 0 佘數不為 0 的 不是偶數 jne again cmp bl si 每次比較 jl again 較小的數 mov bl si 代替 BX 中原來的數 jmp again finish mov ax 0 mov al bl 把最小偶數放到 AX 中 end start 8 程序實現 未調試 model samll code start mov ch 9 比較次數放入 CH mov cl 2 每次 AX 循左移的次數放入 CL 微信 332107782 mov dl 0 初始化 DL DL 中存放 四分之一字節 為三的個數 again dec ch 如果 AX 最後兩個字節循環結束 jz display 則在屏幕上輸出為 3 的個數 rol ax cl mov bl al and bl 3 cmp bl 3 如果 四分之一字節 不為 3 jnz again 則判斷下一個 四分之一字節 inc dl 否則 DL 增加一 jmp again display 在屏幕上輸出 DL 內容 mov ah 2 int 21h end start 9 程序實現 model small data info1 db PLEASE INPUT A NUMBER 0DH 0AH 提示信息 下同 info2 db ILLEGAL CHAR PLEASE TYPE IT AGAIN 0DH 0AH code main proc far start PUSH ax push bx push cx push dx mov ax data mov ds ax mov dx offset info1 call dis str 在屏幕上顯示提示信息 call input num 輸入十六進制數 call dis num 在屏幕上輸出二進制數 pop dx pop cx pop bx pop ax RET main endp 在屏幕上顯示提示信息的過程 dis str proc near 微信 332107782 push ax mov ah 9 int 21h pop ax ret dis str endp 輸入一個四位十六進制數 並保存在 BX 中的過程 input num proc near push ax push cx mov bx 0 初始化 BX mov ch 4 循環次數 十六進制數的位數 new char mov ah 1 int 21h sub al 30h 把 ASCII 值轉換成為二進制數 cmp al 0 和 0 相比 jl wrong 如果比 0 小 說明不是數字 轉往非法字符處理過程 cmp al 9 是否 A F jle add to 如果是 0 9 直接放入 BX 中 sub al 7 如果是 A F 減去 7 cmp al 16 再和 16D 10H 相比 jg wrong 如果大於 16D 說明不是數字 轉入非法字符處理過程 add to mov cl 4 BX 每次左移四位 shl bx cl mov ah 0 add bx ax dec ch jz exit jmp new char 輸入新的數字 wrong push dx mov dx offset info2 call dis str pop dx jmp new char exit pop cx pop ax ret input num endp 微信 332107782 在屏幕上輸出二進進制數的過程 dis num proc near mov cx 16 mov ah 2 re rol bx 1 mov dl bl and dl 1 add dl 30h int 21h dec cx jnz re ret dis num endp end start 10 程序實現 DEBUG 調試通過 model samll data eng db hello sun how are hi are you sun sun is a beutifull girl su nun 用作測試 的字符串 共有三個 SUN info db sun code main proc far start mov ax data mov ds ax mov cx 0 初始化 CX mov di 0 again mov al 24h 24H 字符串結束標誌 的 ASCII 值 cmp al eng di 檢查當前字符是否是 jz exit 如果是結束標誌 就退出 mov al 73h 73H 字母 s 的 ASCII 值 cmp al eng di 檢查當前字符是否是 s 下同 jnz next1 inc di mov al 75h 75H 字母 U 小寫 的 ASCII 值 cmp al eng di jnz next2 inc di mov al 6eh cmp al eng di 微信 332107782 jnz next2 inc cl SUN 單詞的個數放進 CX 中 next1 inc di next2 jmp again 繼續第一步 exit mov dx offset info mov ah 9 int 21h mov dl cl 把 CL 中 SUN 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论