32位汇编习题04

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
习题解答
习题4.17习题4.17-2 4.17
• 方法1:使用字符输入输出子程序 方法1
again: again: call readc al,' cmp al,'0' jb erdisp al,' cmp al,'9' ja erdisp call dispcrlf call dispc jmp done ;等待按键 ;数字 < 0?
7
习题解答
习题4.4 习题4.4
• 已知var1 、 var2 、 var3 和 var4 是 32位无符号整数 , 已知 var1 var2 var3 var4 32 位无符号整数, var 位无符号整数
用汇编语言程序片段实现如下C++语句: 用汇编语言程序片段实现如下C++语句: C++语句 var4=(var1 var2 )+var3 var4=(var1*6)/( var2-7)+var3 eax,var1 mov eax,var1 ebx,6 mov ebx,6 var1 mul ebx ;var1*6 ebx,var2 mov ebx,var2 ebx,7 var2 sub ebx,7 ;var2-7 (var1 var2 div ebx ;(var1*6)/( var2-7) eax,var3 (var1 var2 )+var3 add eax,var3 ;(var1*6)/( var2-7)+var3 var4 mov var4,eax
table F',13 13, byte ' |0 1 2 3 4 5 6 7 8 9 A B C D E F',13,10 byte '---+-------------------------------',13,10 ---+-------------------------------',13, ',13
;数据段
count = 10 array dword 0,1,2,3,4,5,6,7,8,9
;代码段
Leabharlann Baidu
call readuid eax,array[eax*4 lea eax,array[eax*4] call disphd eax,array[eax*4 mov eax,array[eax*4] call dispsid
10
习题解答
习题4.15习题4.15-2 4.15
• 编程实现指令CDQ,将EAX符号扩展到EDX 编程实现指令CDQ,将EAX符号扩展到EDX CDQ, 符号扩展到
(2)使用移位等指令进行优化编程。 使用移位等指令进行优化编程。 • 方法1: 方法1 mov edx,eax edx,31 sar edx,31 • 方法2: 方法2 eax,1 rol eax,1 edx,1 rcr edx,1 edx,31 sar edx,31 eax,1 ror eax,1
8
习题解答
习题4.7 习题4.7 4.
• 定义COUNT(假设为10)个元素的32位数组,输入元 定义COUNT( 假设为10) 个元素的32位数组, COUNT 10 32 位数组
素编号( COUNT利用DISPHD DISPHD子程序输出其 素编号 ( 0 ~ COUNT-1 ) , 利用 DISPHD 子程序输出其 地址、利用DISPSID子程序输出其值。 DISPSID子程序输出其值 地址、利用DISPSID子程序输出其值。
没有该指令,编程实现该指令功能。 没有该指令,编程实现该指令功能。 按照符号扩展的含义编程, EAX最高为 最高为0 (1)按照符号扩展的含义编程,即:EAX最高为0, 则 EDX= EAX最高为 最高为1 EDX=FFFFFFFFH。 EDX=0;EAX最高为1,则EDX=FFFFFFFFH。 test eax,8000h ;测试最高位 eax,8000h 8000 next1 最高位为0 jz next1 ;最高位为0,转移 edx,0 mov edx,0ffffffffh 最高位为1 设置EDX EDX= ;最高位为1,设置EDX=FFFFFFFFH jmp done ;跳过另一个分支 next1 dx,0 设置EDX EDX= next1: mov dx,0 ;设置EDX=0 done: done:
;数字 > 9?
erdisp: mov eax,offset ermsg call dispmsg jmp again done:
习题解答
13
习题4.17习题4.17-3 4.17
• 方法2:使用数字输入输出子程序 方法2
again: again: call readuid ;call readsid eax,0 cmp eax,0 ;数字 < 0? jb erdisp ;jl erdisp eax,9 cmp eax,9 ;数字 > 9? ja erdisp ;jg erdisp call dispuid ;call dispsid jmp done erdisp: erdisp: mov eax,offset ermsg call dispmsg jmp again
9
;输入N,小于10 输入N 小于10 EAX= ;EAX=地址 ;显示地址 EAX= ;EAX=变量值 ;显示数值
习题解答
习题4.15习题4.15-1 4.15
• IA-32处理器的指令 CDQ将 EAX符号扩展到 EDX。 假若 IA-32 处理器的指令CDQ 将 EAX 符号扩展到EDX 。 处理器的指令 CDQ 符号扩展到 EDX
4
习题解答
4.2 判断题 2)指令的相对寻址都是近转移。 指令的相对寻址都是近转移。 •对 JMP指令对应高级语言的GOTO语句 指令对应高级语言的GOTO语句, 4)JMP指令对应高级语言的GOTO语句,所以不能使用 • 错,需要使用 JA和JG指令的条件都是 大于” 指令的条件都是“ 6)JA和JG指令的条件都是“大于”,所以是同一个指 令的两个助记符。 令的两个助记符。 • 错,JA针对无符号数,JG针对有符号数 JA针对无符号数 JG针对有符号数 针对无符号数, JC和JB的条件都是CF= 的条件都是CF 所以是同一条指令。 7)JC和JB的条件都是CF=1,所以是同一条指令。 • 对。无符号小于(JB)必然借位(JC) 无符号小于(JB)必然借位(JC) 10) ECX= LOOP指令和JECX指令都发生转移 指令和JECX指令都发生转移。 10)若ECX=0,则LOOP指令和JECX指令都发生转移。 •对
14
习题解答
习题4.27习题4.27-1 4.27
• 习题2.14在屏幕上显示ASCII表,现仅在数据段设置 习题2 14在屏幕上显示ASCII表 在屏幕上显示 ASCII
表格缓冲区,编程将ASCII ASCII代码值填入留出位置的表 表格缓冲区 , 编程将 ASCII代码值填入留出位置的表 然后调用显示功能实现( 需要利用双重循环) 格 , 然后调用显示功能实现 ( 需要利用双重循环 ) 。
6
习题解答
填空题4.3 填空题-2 ( 4 ) “ CMP EAX,3721H”指令之后是 JZ指令 , 发生转 EAX,3721H” 指令之后是JZ 指令, 3721H” 指令之后是 JZ 指令 移的条件是EAX ________,此时ZF _______。 EAX= ZF= 移的条件是EAX=________,此时ZF=_______。 • 3721H,1 3721H 执行“ EBX,4 指令后,JNC发生转移 发生转移, (5)执行“SHR EBX,4”指令后 , JNC发生转移, 说明 EBX的D3=_____。 EBX的 _____。 •0 ( 6 ) 在 EDX 等 于 0 时 转 移 , 可 以 使 用 指 令 “ CMP EDX,____”、 也可以使用“ EDX,_____”构成 EDX,____” 、 也可以使用 “ TEST EDX,_____” 构成 条件,然后使用JE指令实现转移。 JE指令实现转移 条件,然后使用JE指令实现转移。 • 0,EDX
简答题4.1 简答题-1 (2)数据的直接寻址和指令的直接寻址有什么区别? 数据的直接寻址和指令的直接寻址有什么区别? • 数据的直接寻址给出数据所在的存储器地址,指令 数据的直接寻址给出数据所在的存储器地址, 的直接寻址给出指令所在的存储器地址。 的直接寻址给出指令所在的存储器地址。 什么是奇偶校验? (5)什么是奇偶校验? • 数据通信时,数据的某一位用做传输数据的奇偶校 数据通信时, 验位,数据中包括校验位在内的“ 验位,数据中包括校验位在内的“1”的个数恒为奇 就是奇校验;恒为偶数, 数,就是奇校验;恒为偶数,就是偶校验 助记符JZ JE为什么表达同一条指令 JZ和 为什么表达同一条指令? (6)助记符JZ和JE为什么表达同一条指令? • 两个数相减,差值为0(JZ)与两个数相等(JE)是 两个数相减,差值为0 JZ)与两个数相等(JE) 一个含义
11
习题解答
习题4.17习题4.17-1 4.17
• 编写一个程序, 先提示输入数字“ Input 编写一个程序 , 先提示输入数字 “
Number: Number : 然后在下一行显示输入的数字, 结束; 0 ~ 9” , 然后在下一行显示输入的数字 , 结束 ; 如 果不是键入了0 数字, 就提示错误“ Error!”, 果不是键入了 0 ~ 9 数字 , 就提示错误 “ Error!” , 继续等待输入数字。 继续等待输入数字。 • 方法1:使用字符输入输出子程序 方法1 ;数据段 number(0 ',0 inmsg byte 'Input number(0~9): ',0 dh,0 again: ',0 ermsg byte 0dh,0ah,'Error! Input again: ',0 ;代码段 mov eax,offset inmsg ;提示输入数字 call dispmsg
3
习题解答
简答题4.1 简答题-2 (9)如果循环体的代码量远超过128个字节,还能用 如果循环体的代码量远超过128个字节, 128个字节 LOOP指令实现计数控制循环吗 指令实现计数控制循环吗? LOOP指令实现计数控制循环吗? • 不能,因为LOOP指令的目标地址采用相对短转移, 不能,因为LOOP指令的目标地址采用相对短转移, LOOP指令的目标地址采用相对短转移 只能在-128~+127字节之间循环 ~+127 只能在-128~+127字节之间循环 (10)什么是“先循环、后判断”循环结构? 10)什么是“先循环、后判断”循环结构? • 指先执行循环体 , 然后判断是否继续循环的结构 , 指先执行循环体, 然后判断是否继续循环的结构, 这种结构通常至少执行一次循环体
5
习题解答
填空题4.3 填空题-1 (2)MASM给短转移、近转移和远转移定义的类型名依 MASM给短转移、 给短转移 次是___ ___和___。 ___、 次是___、___和___。 • SHORT,NEAR,FAR SHORT,NEAR, 假设在平展存储模型下,EBX=1256H (3)假设在平展存储模型下,EBX=1256H,双字变量 TABLE 的偏移地址是 20A1H , 线性地址 32F7H 处存 放 20A 32F 3280H 执行指令“ EIP=_______, 3280H , 执行指令 “ JMP EBX” 后 EIP = _______ , 执 行指令“ TABLE[EBX]”后EIP=_______。 行指令“JMP TABLE[EBX]”后EIP=_______。 • 1256H,3280H 1256H 3280H
32位汇编语言习题解答 32位汇编语言习题解答
课件制作: 课件制作: 钱晓捷
钱晓捷,32位汇编语言程序设计,机械工业出版社 钱晓捷,32位汇编语言程序设计, 位汇编语言程序设计
第4章习题:程序结构 章习题:
简答题( 10) 4.1 简答题(2、5、6、9、10) 判断题 10) 4.2 判断题(2、4、6、7、10) 填空题 4.3 填空题(2、3、4、5、6) 15、 17、 27、 4.4、4.7、4.15、4.17、4.27、4.29
相关文档
最新文档