精品文档
std;DF=1,进行地址减量 rep movsb 3.13答:
MOV CL,4
MOV AL,BL ;处理最低位十六进制数 AND AL,0FH CMP AL,0AH JC DIGT4 ADD AL,7
DIGT4: ADD,AL,30H MOV L4,AL
MOV AL,BL ;处理次低位十六进制数 SHR AL,CL CMP AL,0AH JC DIGT3 ADD AL,7
DIGT3: ADD,AL,30H MOV L3,AL
MOV AL,BH ;处理次高位十六进制数 AND AL,0FH CMP AL,0AH JC DIGT2 ADD AL,7
DIGT2: ADD,AL,30H MOV L2,AL
MOV AL,BH ;处理最高位十六进制数 SHR AL,CL CMP AL,0AH JC DIGT1 ADD AL,7
DIGT1: ADD,AL,30H MOV L1,AL 3.14答:
精品文档
精品文档
LEA SI,BUF
LEA BX,ASC MOV CH,100 MOV CL,4
AGAIN: MOV AL,[SI] ;处理低位BCD码 AND AL,0FH ADD AL,30H MOV [BX],AL INC BX
MOV AL,[SI] ;处理高位BCD码 SHR AL,CL ADD AL,30H MOV [BX],AL INC BX INC SI DEC CH JNZ AGAIN
3.15答:(1)MOV BX,-78;(BX)=FFB2H MOVSX EBX,BX;(EBX)=FFFFFFB2H (2)MOV CL,-5;(CL)=FBH MOVSX EDX,CL;(EDX)=FFFFFFFBH (3)MOV AH,9;(AH)=9H MOVZX ECX,AH(ECX)=00000009H (4)MOV AX,87H;(AX)=87H MOVZX EBX,AX;(EBX)=00000087H
3.16答:MOV ECX,12345678H;(ECX)=12345678H BSF EAX,ECX ;(EAX)=00000003H BSR EBX,ECX;(EBX)=0000001CH 3.17答: MOV CX,100 LEA BX,TAB AGN: MOV AL,[BX] ADD AL,0 JP NEXT OR AL,80H
NEXT: OUT 10H,AL
精品文档
精品文档
INC BX LOOP AGN
3.18 答:假设数组的起始地址是BUFFER LEA BX,BUFFER MOV DX,0 MOV CX,100
ONCE: MOV AL,[BX]
TEST AL,80H;是正数还是负数 JNZ FUSHU;是负数,跳转 CMP AL,0;是0吗? JZ NEXT
INC DH;是正数,则DH加1
JMP NEXT
FUSHU: INC DL;是负数,则DL加1 NEXT: INC BX DEC CX JNZ ONCE
MOV POSIT,DH MOV NEGAT,DL
第四章 课后习题
4.1、汇编语言有何特点?编写汇编语言源程序时,一般的组成原则是什么? 4.2、.MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪几种存储模式,各用于创建什么性质的程序?
4.3、如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?
4.4、逻辑段具有哪些属性?完整代码段定义时的默认属性是什么?小型模式下的简化代码段定义具有的默认属性是什么?
4.5、 DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么? 4.6、给出下列语句中,指令立即数(数值表达式)的值: (1)mov al,23h AND 45h OR 67h (2)mov ax,1234h/16+10h (3)mov ax,254h SHL 4
(4)mov al,’a’ AND (NOT(‘b’一 ‘B’)) (5)mov ax,(76543 LT 32768)XOR 7654h
4.7、画图说明下列语句分配的存储空间及初始化的数据值:
精品文档
精品文档
(1) byte_var db ‘BCD’,10,10h,’EF’,2 dup (一l,?,3 dup(4)) (2) word_var dw 1234h,一5,6 dup(?) 4.8、设置一个数据段,按照如下要求定义变量:
(1)myl_b为字符串变量,表示字符串“Personal Computer!” (2)my2_b为用十六进制数表示的字节变量,这个数的大小为100 (3)my3_w为100个未赋值的字变量 (4)my4_c为100的符号常量
(5)my5_c为字符串常量,代替字符串“Personal Computer!”
4.9、假设opw是一个字变量,opbl和opb2是两个字节变量,指出下列语句中的具体错误原因并改正错误。
(1) mov byte ptr [bx],256 (2) mov bx,offset opw[si] (3) add opbl,opb2 (4) mov opbl,al+l (5) sub al,opw (6) mov [di],1234h
4.10、编制一个程序,把字变量X和Y中数值较大者存入MAX字单元;若两者相等,则把-1存入MAX中。假设变量存放的是有符号数。
4.11、设变量DAT为有符号16位数,请编写程序将它的符号状态保存在sign字节单元,即:如果变量值大于等于0,保存0;如果变量值小于0,保存-1。 4.12、 X、Y和Z是3个有符号字节数据,编写一个比较相等关系的程序: (1)如果这3个数都不相等,则显示N;
(2)如果这3个数中有两个数相等,则显示X; (3)如果这3个数都相等,则显示Y。
4.13、编制程序完成12H,23H,F3H,6AH,20H,FEH,10H,C8H,25H和34H共10个无符号字节数据之和,并将结果存入字变量SUM中。
4.14、求出主存从2000H:0开始的一个64KB物理段中共有的空格个数,存入DX中。
4.15、过程定义的一般格式是什么?子程序开始为什么常有PUSH指令,返回前为什么有POP指令?下面完成16位无符号数累加的子程序是否正确?若有错,请改正。 jiafa PROC
push ax xor ax,ax xor dx,dx
again: add ax, [bx]
精品文档