您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第9章 80x86的寻址方式与指令系统 > 【9.4 本 章 小 结】

9.4 本 章 小 结

 

9.4 

本章介绍了计算机指令的格式、微机的寻址方式,重点介绍了80x86指令系统的多种指令。

9.5     

1.填空题

1)假设AL=26HBL=55H,依次执行ADD AL,BLDAA指令后,AL=         

2)在MOV WORD PTR[0072],55AAH的指令的机器代码中,最后一个字符内容是         

3MOV SI,[BX]指令形成源操作数的物理地址时,默认的段寄存器是         

4)假设AL寄存器中的内容是7FH,执行指令ADD AL,2后,符号标志SF和进位标志CF的状态分别是         

5)若定义DAT DB '1234',执行指令MOV AX,WORD PTR DAT后,AX寄存器中的内容是         

6)假设SP=0100HSS=2000H,执行PUSH BX指令后,栈顶的物理地址是         

2.选择题

1        都属于计算机的低级语言。

A.机器语言和高级语言                           B.机器语言和汇编语言

C.汇编语言和高级语言                           D.高级语言和数据库语言

2REPZ指令作为下面哪一条串操作指令的前缀时才能完全发挥它的功能       

AMOVSB                  BSTOSB            CLODSW                 DCMPSW

3)执行下面的程序段后,AL寄存器中的内容应该是       

     MOV  AL,03H

     MOV  BL,09H

     SUB  AL,BL

     AAS

A0FAH               B04H                       C06H                       D86H

4)假设VAR为变量,指令MOV  BX,OFFSET  VAR的寻址方式是       

A.直接寻址                B.间接寻址        C.立即寻址               D.存储器寻址

5)若XY均为无符号整数,且XY,则依次执行MOV AX,XCMP AX,Y指令后,标志位CFZF的状态是       

ACF=0ZF=0                                      BCF=1ZF=1

CCF=0ZF=0                                      DCF=1ZF=1

6)假设AL寄存器的内容是ASCII码表示的一个英文字母,若为大写字母,将其转换为小写字母,否则不变。下面        指令可以实现此功能。

AADD AL,20H                                      BOR AL,20H

CADD AL,'a'-'A'                                     DXOR AL,2

7)下列指令中有语法错误的是       

ASHL AX,CL                                         BMOV AX,[DX]

COUT DX,AL                                        DMOV EAX,[EDX]

3.上机操作题

1)试编制程序,其功能是:内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找的ASCII字符串由13个字符组成:#23H)、7ASCII字符、*2AH)、2ASCII字符、回车符(0DH)、换行符(0AH)。

校验方法为:对字符#及字符*之间的7ASCII字符进行异或操作,若异或操作结果的ASCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。

例如:

内存中有33H,35H,23H(‘#’,第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH(‘*’),32H,31H,0DH,0AH,46H,23H(‘#,第二个字符串开始),46H,41H,30H,2EH,34H,3DH,

30H,2AH(‘*’),32H,31H,0DH,0AH,55H, 结果为23H,46H,41H,30H,2EH,34H,3DH,31H,2AH(‘*’),32H,31H(校验正确,该字符串原样保持), 0DH,0AH,21H,21H,21H,21H,21H,21H,21H,

21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符!代替)。

            EXTRN       LOAD:FAR,SAVE:FAR

N           EQU     26

STAC        SEGMENTSTACK

            DB          128 DUP(?)

STAC        ENDS

DATA        SEGMENT

SOURCE      DB       N+4 DUP(?)       

RESULT      DB       N DUP(0)

HH          DB       2 DUP(0)       

NAME0       DB       'INPUT1.DAT',0

NAME1       DB       'OUTPUT1.DAT',0

DATA        ENDS

CODE        SEGMENT

            ASSUME  CS:CODE,DS:DATA,SS:STAC

START       PROC     FAR

            PUSH     DS

            XOR      AX,AX

            PUSH     AX

            MOV      AX,DATA

            MOV      DS,AX

            LEA      DX,SOURCE           ; 数据区起始地址

            LEA      SI,NAME0            ; 原始数据文件名

            MOV      CX,N+4              ; 字节数

            CALL     LOAD                ; 'INPUT1.DAT'中读取数据

;****BEGIN****

            MOV      SI,0

            MOV      DI,0

            MOV      BX,2                ; 两个ASCII字符串

REPEAT: MOV      AH,0

SEARCH: MOV      AL,SOURCE[SI]

INC      SI

CMP      AL,'#'

          SEARCH

MOV      RESULT[DI],AL

INC      DI

SEARCH1:MOV      AL,SOURCE[SI]

            INC      SI

            CMP      AL,          

            JE       ASCII

            MOV      RESULT[DI],AL

            INC      DI

            XOR      AH,AL

            JMP                        

ASCII:  MOV      RESULT[DI],AL

INC      DI

PUSH     DI

MOV      DI,0

MOV      DH,2

MOV      DL,AH               ; 异或结果暂存在DL

MOV      CL,4                ; 先将异或结果高4位转换成ASCII字符

SHR      AH,CL               ; 本行开始的4行语句将一个十六进制数转换为ASCII

CHANGE: CMP      AH,10

JL       ADD_0

ADD      AH,’A’-’0’-10

ADD_0:  ADD      AH,’0’

MOV      HH[DI],AH

INC      DI

DEC      DH

JZ       EXT

MOV      AH,DL               ; 再将异或结果低4位转换成ASCII字符

AND      AH,0FH

JMP      CHANGE

EXT:    POP      DI

MOV      AL,SOURCE[SI]

MOV      RESULT[DI],AL

INC      SI

INC      DI

MOV      AH,SOURCE[SI]

MOV      RESULT[DI],AH

INC      SI

INC      DI

MOV      DL,HH

MOV      DH,HH+1

CMP      AX,DX

          ERR

MOV      AL,0DH              ; 校验正确

MOV      RESULT[DI],AL

INC      DI

MOV      AL,0AH

MOV      RESULT[DI],AL

INC      DI

JMP      LP

ERR:    SUB      DI,11       ; 校验错误

MOV      AL,'!'

MOV      CX,                 

COVER:  MOV      RESULT[DI],AL

INC      DI

LOOP     COVER

LP:                               

JZ       EXIT

JMP      REPEAT

EXIT:   NOP

;****END****

            LEA      DX,RESULT   ; 结果数据区首址

            LEA      SI,NAME1    ; 结果文件名

            MOV      CX,N        ; 字节数

            CALL     SAVE        ; 保存结果到文件

            RET

START   ENDP

CODE    ENDS

            END    START

2)试编制程序,其功能是:内存中连续存放的208位无符号数是一个自动抄表仪抄录的20个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X表示用水量;Y表示水费,单位为分)。

                     Y=X*70                        X<=5

                     Y=X*100                      5X=20

                     Y=X*150                      X20

例如:

用水量(X)为04H, 10H, 18H…,水费(Y)为0118H,0640H,0E10H…。

试计算出这20个用户应缴纳的水费,结果用字(WORD)表示。

            EXTRN    LOAD:FAR,SAVE:FAR

N           EQU      20

STAC        SEGMENT  STACK

            DB       128 DUP(?)

STAC        ENDS

DATA        SEGMENT

SOURCE      DB       N DUP(?)       

RESULT      DW       N DUP(0)       

NAME0       DB       'INPUT1.DAT',0

NAME1       DB       'OUTPUT1.DAT',0

DATA        ENDS

CODE        SEGMENT

            ASSUME  CS:CODE,DS:DATA,SS:STAC

START       PROC     FAR

            PUSH     DS

            XOR      AX,AX

            PUSH     AX

            MOV      AX,DATA

            MOV      DS,AX

            LEA      DX,SOURCE           ; 数据区起始地址

            LEA      SI,NAME0            ; 原始数据文件名

            MOV      CX,N                ; 字节数

            CALL     LOAD                ; 'INPUT1.DAT'中读取数据

;****BEGIN****

            LEA      SI,SOURCE

            LEA      DI,RESULT

            CLD

            MOV      CX,N

            MOV      BL,70

            MOV      BH,100

            MOV      DL,150

NEXT:                             

            CMP      AL,5

            J        GT5

                                     

            JMP      STORE

GT5:    CMP      AL,20

            J        GT20

                                     

            JMP      STORE

GT20:                             

STORE:  MOV      [DI],AX

                                     

                                      

            LOOP     NEXT

;****END****

            LEA      DX,RESULT           ; 结果数据区首址

            LEA      SI,NAME1            ; 结果文件名

            MOV      CX,N*2              ; 字节数

            CALL     SAVE                ; 保存结果到文件

            RET

START   ENDP

CODE    ENDS

            END    START

3)试编制程序,其功能是:一个故障报警系统连续集20个字节数据存于SOURCE开始的内存区域,如果数据字节中有二进制位00代表有故障),则记录该数据字节中0的个数,并按数据字节在前,0的个数在后的顺序存放到RESULT开始的内存区域。

例如:

内存中有FEH,90H,FFH,DDH…,结果为FEH,01H,90H,06H,FFH,00H,DDH,02H…。

            EXTRN    LOAD:FAR,SAVE:FAR

N           EQU      20

ESC_CODE EQU      27

STAC        SEGMENT  STACK

            DB       128 DUP(?)

STAC        ENDS

DATA        SEGMENT

SOURCE      DB       N DUP(?)       

RESULT      DB       N*2 DUP(0)       

NAME0       DB       'INPUT1.DAT',0

NAME1       DB       'OUTPUT1.DAT',0

DATA        ENDS

CODE        SEGMENT

            ASSUME  CS:CODE,DS:DATA,SS:STAC

START       PROC     FAR

            PUSH     DS

            XOR      AX,AX

            PUSH     AX

            MOV      AX,DATA

            MOV      DS,AX

            MOV      ES,AX           ; 置附加段寄存器

            LEA      DX,SOURCE       ; 数据区起始地址

            LEA      SI,NAME0        ; 原始数据文件名

            MOV      CX,N            ; 字节数

            CALL     LOAD            ; 'INPUT1.DAT'中读取数据

;****BEGIN****

            LEA      SI,SOURCE

            MOV      DI,OFFSET RESULT

            CLD

            MOV      DL,N

LP1:                                     ; 字节数计数器DL

            MOV      [DI],AL

            MOV      CX,                         

MOV     DH,0

LP2:                       AL,1

JC                               

INC         DH

LP3:                       LP2

INC         DI

MOV     [DI],                    

                              

                             

            JNZ                                

;****END****

            LEA      DX,RESULT       ; 结果数据区首址

            LEA      SI,NAME1        ; 结果文件名

            MOV      CX,N*2          ; 字节数

            CALL     SAVE            ; 保存结果到文件

            RET

START       ENDP

CODE        ENDS

            END    START