第4章 汇编语言程序设计习题解答

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题4.4
• 指令AND AX,7315H AND 0FFH中,两个 AND有什么差别?这两个AND操作分别在什 么时候执行? 解答: (1)指令AND AX,7315H AND 0FFH中的第 一个AND是指令系统中的逻辑“与”指令,而 第二个AND是表达式中的表示逻辑“与”关系 的。 (2)指令AND AX,7315H AND 0FFH中的第 一个AND是在CPU执行指令操作时才会执行。 而第二个AND是在汇编时就会将7315H和 0FFH 作逻辑“与”运算,得到结果0015H。 然后执行第一个AND指令,完成AX的内容与 0015H的逻辑“与”运算。
DATA
习题4.20
• 在A1单元开始定义了一个长度为N的字符串,找出其 中所有的小写字母并存放在以A2开始的存储区中.统 计出小写字母的个数,存放到SL单元中.请编写一完整 的源程序.程序段如下: DATA SEGMENT A1 DB ‘……’ N DB EQU $-A1 A2 DB N DUP(?) SL DB ? DATA ENDS
第4章 汇编语言程序设计 习题解答
请打开书P176
习题4.1
• 画出下列语句的数据在存储器中的存储情况: • ARRAYB DB 63,63H,’ABCD’,3 DUP(?),2 DUP(1,3) • ARRAYW DW 1234H,5,’AB’,’CD’,?,2 DUP(1,3)
3FH 63H 41H 42H 43H 44H XX XX XX 01H 03H 01H 03H
00H 01H 01H … 00H 01H 01H 00H 01H 01H
16组
习题4.8
• 要在以DA1为首地址的数据区中依次存放下列 数据; • ‘A’,‘B’,0,0,’C’,’D’, 0,0 • 请分别用DB,DW和DD语句实现。 解答: (1) DA1 DB ‘A’,‘B’,0,0,’C’,’D’, 0,0 (2) DA1 DW ‘BA’,0,’ DC’, 0 (3)DA1 DD ‘BA’, ’DC’
习题4.15
• 编写一程序段,将AL中的第7和第0位,第6和第1位,第5 和第2位,第4和第3位互换. MOV MOV K1: SHR RCL DEC JNZ MOV CX,8; AH,0; AL,1; AH,1; CX; K1; AL,AH
P99 P100
习题4.16
• 试编写一程序段,在CHAR为首的26个单元中依 次存放字母‘A’- ‘Z’. CHAR DB 26 DUP (?) START: LEA BX, CHAR; MOV AL, ‘ A’ MOV CX, 26 LOP1: MOV [BX] , AL INC AL INC BX LOOP LOP1 HLT
习题4.19
• 编写一个完整的源程序,将BUF字节单元存放的两位 BCD码,转换成2个字节的ASCⅡ码,并分别存放在ASC 和ASC+1字节单元中. • 例如(BUF字节单元)=58H,那么(ASC字节单元)=35H, (ASC+1字节单元)=38H
SEGMENT BCD DB XXH ASC DB ?,? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CL,4 MOV AL,BCD ;取BCD码数 SHR AL,CL ;转换高位 ADD AL,30H MOV ASC,AL MOV AL,BCD AND AL,0FH ;转换低位 ADD AL,30H MOV ASC+1,AL MOV AH,4CH INT 21H CODE ENDS END START
习题4.12
BUFF DB ‘ABD$QC%$A….XYZ’ ;定义数组BUFF CONT DB EQU $-BUFF ;定义长度 … CLD ;方向标志DF=0串操作增量 LEA DI,BUFF ;送数组BUFF的首地址偏移量到DI MOV CX,CONT ; 送数组BUFF的长度到CX MOV AL,’$’ ; 送$的ASCⅡ码到AL XOR DX,DX ;DX清零 NEXT:REPNZ SCASB ;P102,串扫描AL-[ES:DI],若CX≠0且ZF=0则重复执行 ;若CX=0或ZF=1,退出重复,停止串操作 CMP CX,0 ;CX-0,CX内容与0比较 JZ K1 ;P111,等于/为零,则转移到K1 INC DX ;DX加1 JMP NEXT ;转NEXT K1: … 上述程序运行后,DX中的值表示的意义是什么? 答:上述程序运行后, DX中的值表示的是字符串中符号’$’ 的个数
0027H 0028H 0029H 00H 2CH 00H
习题4.7
• 已知数据定义语句为: BUFFER DB 16 DUP(0,2 DUP(1)) 则其中字数据单元内容为0100H的单元数是多少? 解答:字数据单元内容 00H 01H 为0100H的单元数是16个 01H 16 DUP 16组
习题4.3
• 程序中数据定义如下: ARRAY DB ‘ABCDEF’ RESULT DB ? TABLE DW 20 DUP(?) • 则执行指令 MOV AX,TYPE RESULT后,AX=1 MOV BX, TYPE TABLE后,BX= 2 MOV CX, LENGTH TABLE后,CX=20 MOV DX, LENGTH ARRAY后,DX=1 MOV SI ,SIZE TABLE后,SI=2×20=40 MOV DI ,SIZE ARRAY后,DI=1
习题4.13
• 设A,B是长度为10的字节数组,用串操作指令编写程 序实现AB两数组内容的相互交换.试完善程序. DATA SEGMENT A DB 1,2,3,4,5,6,7,8,9,0AH ORG 0010H B DB 0AH,9,8,7,6,5,4,3,2,1 DATA ENDS … LEA SI,A LEA DI,B MOV CX,10
习题4.9
• 试按下列要求在数据段中依次书写各数据定义语句: (1)以DA1为首字节的连续存储单元中存放20H个重 复的数据序列:2,3,10个4,一个7。 (2)DA2为字符串变量,用字变量(DW)设置一字 符串;‘STUDENTS’(按次顺序存放在各单元中)。 (3)用等值语句给符号COUNT赋值以DA1为首地址 的数据区共占有的字节数,此等值语句必须放在最 后一语句。 解答: (1)DA1 DB 20H DUP(2,3,10 DUP(4),7) (2)DA2 DW ‘TS’, ‘DU’,‘NE’,’ST’, (3) COUNT EQU DA2- DA1
LOP: LODSB XCHG AL,[DI] XCHG SI,DI DEC DI STOSB XCHG SI,DI INC DI LOOP LOP
习题4.14
• 现有一子程序: SUB1: PROC TEST AL,80H(1000 0000B);AL的值与80H相“与”,判断正负 JE PLUS ;如果AL的首位为0(即为正),则转移到PLUS ;如果AL为负,则顺序执行 TEST BL,80H ; 判断BL的值的正负 JNE EXITO ;如果BL的首位为1(为负),则转移到EXITO ;如果BL为正,则顺序执行 JMP XCHANGE;转移到XCHANGE PLUS: TEST BL,80H ;判断BL的值的正负 JE EXITO ;如果BL的首位为0(即为正),则转移到EXITO ;如果BL为负,时顺序执行 XCHANGE: XCHG AL,BL ;AL与BL交换 EXITO: RET ;返回主程序 SUB1 ENDP 试回答(1)子程序的功能是什么? (2)如调用前AL=9AH,BL=77H,那么返回主程序时AL=?;BL=? 解答:(1)子程序的功能是判别AL和BL中的数是否为异号数,当为异号时交换,否则不 变。 (2) AL中的数据的最高位为1,BL中的数据的最高位为0,即两个数为异号,所以 要交换AL和BL中的内容,即AL=77H,BL=9AH。
习题4.10
• 下面程序段是实现从键盘输入十个一位10进制数后 累加,最后累加和以非压缩BCD码形式存放在AH (高位)和AL (低位)中。试把程序段中所空缺 的指令填上。 XOR BX ,BX ;BX清零 MOV CX,10 ; 传送数据长度 LOP:MOV AH,01H;中断INT 21H的01H号调用 INT 21H ;中断调用P172, 键入值送入AL中 MOV AH,BH ;将BH的内容传AH ADD AL,BL ;BL与AL的值相加,结果在AL中 AAA ;非压缩BCD码加法调整 MOV BX,AX ;累加结果送BX LOOP LOP ;CX-1→CX,判断CX≠0,则转
习题4.11
• 下面程序段的功能是把DA1数据区的0-9转换为对应的 ASCⅡ码.
DA1 DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ASCI DB 10 DUP(?) CUNT = ASCI-DA1 LEA SI,DA1 ;送数组DA1的首地址偏移量到SI LEA DI, ASCI ;送数组ASCI的首地址偏移量到DI MOV CX, CUNT;送数组DA1的长度 LOP1: MOV AL,[SI] ;取数 ADD AL,30H;或者OR AL,30H;加30H变成ASCⅡ码 MOV [DI],AL ;转换后存入数组ASCI INC SI ;源数据地址加1 INC DI ;目的数据地址加1 LOOP LOP1 ;CX-1→CX,判断CX≠0,则转
习题4.5
• 设BX=1034H,则执行下列指令: MOV AX,BX AND 0FFH MOV CX,BX EQ 1234H 后,AX和CX各多少?若BX=1234H,则结果 如何? 解答(1) BX AND 0FFH=0034H (2) 0034H→ AX=0034H (3) BX EQ 1234H= 0000H (4) 0000H → CX=0000H 结果: AX=0034H; CX=0000H 若BX=1234H,则结果: AX=0034H; CX=FFFFH
习题4.17
• 设在数据段中有X,Y两个变量(字节单元),试编写程序 段计算(只写有关功能的指令). X 当X≥0时 • Y= │X│ 当X <0时
XБайду номын сангаасY
· · ·
DB DB
X Y
AL,X AL,0 DONE AL Y,AL
MOV CMP JGE NEG DONE: MOV
习题4.18
• 编写程序段计算SUM=a1+ a2 + ….+ a20,已知a1- a20 依次存放在以BUF为首址的数据区,每个数据占两 个字节,和数SUM也为两个字节.(要求用循环结构 编写,循环控制采用计数控制).此题勿需书写源程 序格式,只需要把题中要求的有关指令序列书写出 来. MOV AX,0; MOV BX,OFFSET BUF; MOV CX,20; LOP:ADD AX,[BX]; INC BX; INC BX; LOOP LOP; MOV SUM,AX;
习题4.6
• 设已知语句为: ORG 0024H DATA1 DW 4,12H,$+4(0028H +04H=002CH) 则执行指令MOV AX,DATA1+4后AX的值是多少? 解答: 0024H 04H (1)DATA1+4=0024H+04H=0028H 0025H 00H 12H (2)[0028H]=002CH →AX= 002CH 0026H
34H 12H 05H 00H 42H 41H 44H 43H XX XX 01H 00H 03H 00H 01H 00H 03H 00H
习题4.2
• 程序中数据定义如下: DATA1 DW ? DATA2 DB 32 DUP(?) DATA3 DD ? DLENGTH EQU $-DATA1 • 此时DLENGTH的值是多少? 解答: DLENGTH=2(字)+32+4(双字)=38
相关文档
最新文档