好文档 - 专业文书写作范文服务资料分享网站

新版汇编语言程序设计钱晓捷第2章习题答

天下 分享 时间: 加入收藏 我要投稿 点赞

(1)在AH寄存器置系统功能调用号; (2)在指定的寄存器中设置 入口参数;

(3)用INT21H(或ROM—BIOS的中断向量号)指令执行功能调用; (4)据出口参数分析功能调用运行情况。

〔习题2.34〕补充例2.40,当有溢出时显示“Error! Overflow!”,无溢出时显示“OK”。 〔解答〕

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.35〕补充例2.42,显示“1”的个数;注意首先将个数转换为ASCII码。 〔解答〕

and al,7fh ;使d7=0 mov dl,al ;转存于dl jnp next ;奇数个1转

or al,80h ;偶数个1 使d7=1 next: xor bl,bl ;纪录1的个数 dl=0 mov cx,8 ;移位次数

again: shl dl,1 ;逻辑左移1次 jnc desp ;如cf=0 转

inc bl ;否则cf=1 个数加1

desp: loop again ;cx=cx-1 如cx不等于0,循环

or bl,30h ;个数变为ASCII码 mov ah,02h ;在CRT上显示个数 mov dl,bl int 21h ret

〔习题2.36〕先提示输入数字“Input Number:0 ~ 9”,然后在下一行显示输入的数字,结束;如果不是键入了0 ~ 9数字,就提示错误“Error!”,继续等待输入数字。 〔解答〕

; 数据段

str1 db 'Input Number:0~9 : ',0dh,0ah,'$' str2 db 'Error!',0dh,0ah,'$' ; 代码段

mov ah,09h ; 显示str1字符串 mov dx,offset str1 int 21h

getkey: mov ah,1 ; 调用DOS功能 int 21h cmp al,'0'

jb error ; 小于0,出错处理 cmp al,'9'

ja error ; 大于9,出错处理

mov ah,02h ; 调用DOS显示字符功能,显示该数字 mov dl,al int 21h

... ; 终止程序执行,返回DOS

error: mov ah,09h ; 出错,调用DOS 功能显示str2字符串 mov dx,offset str2 int 21h

jmp getkey ; 返回按键

〔习题2.37〕从键盘输入一个字符串(不超过255个),将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。 〔解答〕

思路:参考P67 例2.52用0ah号DOS系统功能调用,从键盘输入一个字符串,然后从键盘缓冲区逐个取字符,在“a”与“z”之间的字符为小写字母,需要转换为大写字母(减去20h),其他不变。

;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

〔习题2.38〕指令对状态标志的作用可以分成多种情况,例如无影响、无定义、按结果影响、特别说明的影响等,你能区别这些情况吗?分别用具体的指令来说明。 〔解答〕

〔习题2.39〕8086指令系统分成哪6个功能组?各组主要包含什么指令,举例说明。 〔解答〕

8086指令系统分成的6个功能组是 (1)数据传送类令:

①通用数据传送指令如传送指令MOV、交换指令XCHG、换码指令XLAT ②堆栈操作指令如进栈指令PUSH出栈指令POP ③标志传送指令如标志寄存器传送;标志位操作

④地址传送指令如有效地址传送指令LEA、指针传送指令LDS指针传送指令LES ⑤输入输出指令如输入指令IN、输出指令OUT (2)算术运算指令

①加法指令如加法指令ADD、带进位加法指令ADC、增量指令INC

②减法指令如减法指令SUB、带借位指令SBB、减量指令DEC、求补指令NEG、比较指令CMP

③乘法指令如无符号乘法指令MUL、有符号乘法指令IMUL ④除法指令如无符号数除法指令DIV、有符号数除法指令IDIV ⑤符号扩展指令如字节转换字指令CBW、字转换字节指令CWD ⑥十进制调整指令如压缩BCD码调整指令、非压缩BCD码调整指令 (3)位操作类指令

①逻辑运算指令如逻辑指令AND、逻辑或指令OR、逻辑异或指令XOR、逻辑非指令NOT、测试指令TEST

②移位指令如逻辑移位指令SHL和SHR、算术移位指令SAL和SAR ③循环移位指令如不带移位指令XOL和ROR、带移位指令RCL和RCR (4)控制转移类指令 ①无条件转移指令JMP

②条件转移指令如判断单个标志状态JZ/JE、JNZ/JNE、JS/JNS、JP/JPE、JNP/JPO、JC/JB、JNC/JNB/JAE,用于比较无符号数高低JB(JNAE)、JNB(JAE)、JBE(JNA)、JNBE(JA),用于比较有符号数大小JL(JNGE)、JNL(JGE)、JLE(JNG)、JNLE(JG) ③循环指令LOOP

④子程序指令如子程序调用指令CALL、子程序返回指令RET ⑤中断指令如INT N (5)串操作类指令 ①串传送指令MOVS ②串存储指令STOS ③串读取指令LODS ④串比较指令CMPS ⑤串扫描指令SCAS ⑥重复前缀指令REP; (6)处理机控制类指令 ①空操作指令NOP ②段超越前缀指令SEG ③封锁前缀指令LOCK ④暂停指令HLT ⑤交权指令ESC ⑥等待指令WAIT。

〔习题2.40〕总结8086指令系统所采用的各种寻址方式,包括一般的数据寻址、外设数据寻址、堆栈数据寻址、串操作数据寻址、转移指令目的地址的寻址等,并举例说明。 〔解答〕

1. 一般的数据寻址

立即数寻址方式如:mov al,05h 寄存器寻址方式如:mov bx,ax 存储器寻址方式

(1)直接寻址方式如:mov ax,[2000h]

(2)寄存器间接寻址方式如:mov ax,es:[2000h] (3)寄存器相对寻址方式如:mov ax,[di+06h] (4)基址变址寻址方式如:mov ax,[bx+si]

(5)相对基址变址寻址方式如:mov ax,[bx+si+06h] 2. 外设数据寻址 输入指令IN,如: in al,21h in ax,dx

输出指令OUT,如: out dx,al

3. 堆栈数据寻址

新版汇编语言程序设计钱晓捷第2章习题答

(1)在AH寄存器置系统功能调用号;(2)在指定的寄存器中设置入口参数;(3)用INT21H(或ROM—BIOS的中断向量号)指令执行功能调用;(4)据出口参数分析功能调用运行情况。〔习题2.34〕补充例2.40,当有溢出时显示“Error!Overflow!”,无溢出时显示“OK”。〔解答〕okmsgdb?OK?,
推荐度:
点击下载文档文档为doc格式
5vw2h8bgqu7dd7d92wpx
领取福利

微信扫码领取福利

微信扫码分享