习题集解答

第五章  汇编语言程序设计
1.从4000H单元开始定义数据段如下,请画出所定义存储器的分配图。
    BUF  SEGMENT
    DAl  DW  3456H
    DA2  DB  2  DUP(7,8)
    BUF  ENDS
答:
存储器的分配图
2.对于习题1的定义,请说明下列每条指令执行后的结果。
    1、 MOV  AX,SEG  DAl
    2、MOV  AX,SEG  DA2
    3、MOV  BX,OFFSET  DAl
    4、MOV  BX,OFFSET  DA2
    5、MOV  CX,TYPE  DAl
    6、MOV  CX,TYPE  DA2
    7、MOV  DX,LENGTH  DAl
    8、MOV  DX,LENGTH  DA2
    9、MOV  AX,SIZE  DAl    ‘
    10、MOV  AX,SIZE  DA2
答:1、(AX)=(DS)
    2、(AX)=(DS)+2
    3、(BX)=4000H
    4、(BX)=4002H
    5、(CX)=2
    6、(CX)=1
    7、(DX)=2
    8、(DX)=4
    9、(AX)=2
    10、(AX)=4
 
3.已知数据定义如下,请计算变量PL的值是多少?
    DATA  DB  ‘AB’
    DATAl DB  10 DUP(?)
    PL    EQU  $-DATA
答:PL=DATA+12-DATA=12
字符串截取后四位方法 
 
4.已知A=25、B=15、C=4,请计算下列表达式的值。
    (1) A × 50+B    (2) A MOD C+B
    (3)(A+4)×B-3    (4) B/3 MOD 4
    (5)A LE B      (6) A XOR 50
答:(1) A × 50+B= 25 × 50+15=1250+15=12515 
(2) A MOD C+B=25 MOD 4+15=1+15=16
    (3)(A+4)×B-3 =(25+4)×15-3 =1500-3=1497 
(4) B/3 MOD 4 =15/3 MOD 4 =5 MOD 4 =1
    (5)A LE B  =25  LE 15 = 0   
(6) A XOR 50 = 25 XOR 50 = 43
 
 
5.已知内存DATA单元存放一个字数据,请统计其中含有0的个数,并送人
RESULT单元的程序。
答:程序如下:
DATA1    SEGMENT
DATA    DW 1234h
COUNT    DB 0
DATA1    ENDS
CODE    SEGMENT
    ASSUME CS:CODE,DS:DATA1
START:    MOV AX,DATA1
    MOV DS,AX
    MOV AX,DATA
    MOV CX,16
LOP:    TEST AX,8000H
    JNZ NEXT
    INC RESULT
NEXT:    ROL AX,1
    LOOP LOP
    INT 3
CODE    ENDS
    END START
6.已知从数据段TAB单元开始,顺序存放十六进制数0~F的ASCII码,寄存器AL中的高四位二进制数是0、低四位是1。 请设计程序:用查表指令(XLAT)将寄存器AL中低四位的十六进制数转换为ASCII码。
答:DATA    SEGMENT
TAB    DB '0123456789ABCDEF'
    DATA    ENDS
CODE    SEGMENT
    ASSUME CS:CODE,DS:DATA
START:    MOV AX,DATA
    MOV DS,AX
    LEA BX,TAB
    XLAT
    INT 3
CODE    ENDS
    END START
       
7.已知从数据段BUF单元开始存放一个三字节的带符号数,请设计对其求补的程序。 
答:DATA    SEGMENT
BUF  DB 97H,87H,9AH
RES  DB 3 DUP(?)
DATA    ENDS
CODE    SEGMENT
          ASSUME CS:CODE,DS:DATA
START:    MOV AX,DATA
          MOV DS,AX
          LEA BX,BUF
        LEA SI,RES
          MOV CX,3
LOP:      MOV AL,[BX]
            XOR AL,0FFH
            MOV [SI],AL
          LOOP LOP
            CLC
        LEA SI,RES
          MOV CX,3
LOP1:      MOV AL,[SI]
            ADC AL,0
            MOV [SI],AL
          LOOP LOP1
            INT 3
CODE        ENDS
            END START
 
   
    8.已知从数据段BUF单元开始存放字节型的带符号数X和Y,请设计计算Y=6X+8的程序。
答:DATA    SEGMENT
BUF  DB 97H,87H ;X=97H和Y=87H
DATA    ENDS
CODE    SEGMENT
          ASSUME CS:CODE,DS:DATA
START:    MOV AX,DATA
          MOV DS,AX
          MOV AH,0
            MOV AL,BUF
            SHL AX,1 
            MOV BX,AX
            SHL AX,1
            ADD AX,BX
            ADD AX,8
            MOV BUF+1,AL
            MOV BUF+2,AH
            INT 3
CODE        ENDS
            END START
 
    9.已知X、Y是字节型的无符号数,请设计程序计算:
            X/4    (0≤x<10)
      Y=
            X-10    (10≤X<20)
  答:程序如下:
DATA    SEGMENT
X      DB 84H
Y      DB 0
DATA    ENDS
CODE    SEGMENT
                    ASSUME CS:CODE,DS:DATA
START:    MOV AX,DATA
            MOV DS,AX
        MOV AL,X
        CMP AL,10
            JAE  NEXT
            SHR AL,1
            SHR AL,1
            JMP EN
NEXT:    SUB AL,10
    EN:    MOV Y,AL
            INT 3
CODE    ENDS
  10.已知从数据段BUF单元开始存放15个字节型数据,请设计程序将其中负数和零分别送往MINUS和ZERO开始的存储器单元。
答:程序如下:
      DATA  SEGMENT
        BUF    DB  15DUP(?)
        MINUS  DB  15 DUP(?)      ;存放负数
        ZERO  DB  15 DUP(?)        ;存放0
        DATA  ENDS
      CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA
        ORG 100H
    START:    MOV AX,DATA
        MOV DS,AX
        LEA BX,BUF
        MOV CX,15
        LEA SI,MINUS
        LEA DI,ZERO
    LOP:    MOV AL,[BX]
        CMP AL,0
        JGE PZ
        MOV [SI],AL
        INC SI
        JMP NEXT
    PZ:    JG NEXT
        MOV [DI],AL
        INC DI
        JMP NEXT
    NEXT:    INC BX
        LOOP LOP
        INT 3
    CODE    ENDS
        END START
 
    12.编一程序将字符串STR(长度20字节)中所有"&"用"$"代替。
答:程序如下:
DATA    SEGMENT
STR    DB 'G674GH&6TR677&74Y&98'
DATA    ENDS
CODE    SEGMENT
    ASSUME CS:CODE,DS:DATA
START:    MOV AX,DATA
    MOV DS,AX
    LEA BX,STR
    MOV CX,20
LOP:    MOV AL,[BX]
    CMP AL,'&'
    JNZ NEXT
    MOV AL,'$'
    MOV [BX],AL
NEXT:    INC BX
    LOOP LOP
    INT 3
CODE    ENDS
    END START
13.请设计程序,将存储器单元2200~2210H清0、2250H~2260H置1、22AOH~
  22BOH置55H。要求写出主程序和子程序。
解:程序如下:
DATA    SEGMENT
BUF1      EQU 2200H
BUF2      EQU 2200H
BUF3      EQU 2200H
DATA    ENDS
STACK  SEGMENT
        DB 20 DUP(?)
STACK  ENDS
CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA,SS:STACK
BEG    PROC FAR
START:  MOV AX,DATA
        MOV DS,AX
        MOV AX,STACK
        MOV SS,AX
        LEA BX,BUF1
MOV AL,0
CALL FMOV
LEA BX,BUF2
MOV AL,1
CALL FMOV
LEA BX,BUF3
MOV AL,55H
CALL FMOV
        RET
START  ENDP
FMOV    PROC NEAR
            MOV CX,16
  LOP:    MOV [BX],AL
            INC BX
              LOOP LOP
        RET
FMOV    ENDP
CODE    ENDS
        END BEG
 
14.编写程序,要求:
    (1)键盘键入两个字符串STRING1和STRING2
    (2)比较两串所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示  ‘NOMATCH’。
解:程序如下:
DATA    SEGMENT
STRING1 DB 10
        DB ?
        DB 10 DUP(?)           
STRING2 DB 10
        DB ?
        DB 10 DUP(?)
XT      DB 'MATCH',13,10,'$'       
BXT    DB 'NO MATCH',13,10,'$'
DATA    ENDS
CODE    SEGMENT

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。