第二部分  汇编语言编程实验
实验一
对两个8字节无符号数求和,这两个数分别用变量DATA1DATA2表示。将两数之和的最高进位放在AL中,两数之和的其他位按从高到低顺序依次放在SI,BX,CX,DX中。
    解:程序如下:
                DATA   SEGMENT
                DATA1  DB 0CDH,0BCH,0ABH,9AH,78H,56H,34H,12H
                DATA2  DB 12H,34H,56H,78H,9AH,0ABH,0BCH,0CDH
                DATA  ENDS
                CODE  SEGMENT
                       ASSUME  CS:CODE, DS:DATA
                BG:    MOV AX, DATA
                       MOV DS, AX
                       LEA DI, DATA1
                    MOV DX, [DI]
                       MOV CX, [DI+2]
                    MOV BX, [DI+4]
                     MOV SI, [DI+6]
LEA DI, DATA2
ADD DX, [DI]
                       ADC CX, [DI+2]
                    ADC BX, [DI+4]
                     ADC SI, [DI+6]
                     MOV AL, 0
ADC AL, 0
MOV AH, 4CH
INT 21H
CODE    ENDS
                        END BG
实验二
比较以存储变量DATA1DATA2表示的两个有符号数据的大小,将其中较大数据放在BX寄存器中。
解:程序如下:
DATA   SEGMENT
DATA1  DW  -113
DATA2  DW  -110
DATA   ENDS
CODE   SEGMENT
              ASSUME CS:CODE, DS:DATA
BEGIN: MOV AX, DATA
              MOV DS, AX
MOV BX, DATA1
CMP BX, DATA2
JGE NEXT
MOV BX, DATA2
NEXT:  MOV AH, 4CH
INT 21H
CODE  ENDS
              END BEGIN
实验三
    AA单元开始的20个连续单元中存放有20个无符号数,从中出最大数送入BB单元中,试编程。
答: 先把第一个数送入AL寄存器,将AL中的数与后面的19个数逐个比较,若AL中的数小于相比较的数,将两两交换位置,否则两数不交换位置。在比较过程中,AL中始终保持较大的数,比较19次,则AL中必为最大数,然后将其送入BB单元中。
    DATA    SEGMENT
    AA      DB  36,58,16,46,71,118,73,52,41,62
            DB  2,18,8,24,56,79,113,87,104,75
    BB      DB  ?
    DATA    ENDS
    CODE    SEGMENT
            ASSUME  DS:DATA, CS:CODE
    MAIN    PROC FAR
    START:  PUSH    DS
            MOV AX, 0
            PUSH    AX
            MOV AX, DATA
            MOV DS, AX
            MOV AL, AA
            MOV BX, OFFSET AA
            MOV CX, 29
    LOOP1:  INC BX
            CMP AL, [BX]
            JAE LOOP2
            XCHG    AL, [BX]
    LOOP2:  DEC CX
            JNZ LOOP1
            MOV BB, AL
            RET
    MAIN    ENDP
    CODE    ENDS
END START
实验四
    试编写一汇编源程序:出从无符号字节数据存储变量VAR开始存放的N个数中的最大数放在BH中。
解:程序如下:
          DSEG     SEGMENT
          VAR     DB 3,56H, 6, 19H, 23H, 0A5H
            N      EQU $-VAR
          DSEG    ENDS
          CSEG    SEGMENT
                  ASSUME CS: CSEG, DS: DSEG
            BG:    MOV AX, DSEG
                  MOV DS, AX
                  MOV CX, N-1
                  MOV SI, 0
                  MOV BH, VAR[SI]
JCXZ LAST
          AGIN:   INC SI
                  CMP BH, VAR[SI]
                  JAE NEXT
                   MOV BH, VAR[SI]
          NEXT:   LOOP AGIN
          LAST:   MOV AH, 4CH
INT  21H
          CSEG     ENDS
                   END  BG
实验五
    试编写一汇编源程序:将一组有符号存储字节数据按从小到大的顺序排列。设数组变量为VAR,数组元素个数为N
D       SEGMENT
VAR       DB -1, -10, -100, 27H, 0AH, 47H
N       EQU $-VAR
D       ENDS
C       SEGMENT
          ASSUME CS: C, DS:D
B:      MOV AX, D
          MOV DS, AX
MOV CX, N-1
MOV DX, 1
AG:      CALL SUBP
INC DX
LOOP AG
  MOV AH,4CH
  INT 21H
  SUBP PROC
  PUSH CX
  MOV CX, N
  SUB CX, DX
  MOV SI, 0
RECMP:    MOV AL, VAR[SI]
  CMP AL, VAR[SI+1]
  JLE NOCH
  XCHG AL, VAR[SI+1]
  XCHG AL, VAR[SI]
NOCH:      INC SI
          LOOP RECMP
          POP CX             
  RET
SUBP        ENDP
C        ENDS
         END B
实验六
    试编写一源程序:在显示器上显示“HOW ARE YOU?,然后读一个字符。但不显示此字符,若读入字符是‘Y’,则显示“OK”。
解:程序如下:
   D      SEGMENT
  D1    DB  'HOW ARE YOU?', 0DH, 0AH, '$'
D2    DB 'OK', 0DH, 0AH, '$'
  D      ENDS
  C      SEGMENT
          ASSUME  CS:C, DS:D
  BG:    MOV AX, D
          MOV DS, AX
          MOV DX, OFFSET D1
          MOV AH, 9
INT 21H
          MOV AH,8
          INT 21H
CMP AL, 'Y'
JNE NEXT
LEA DX, D2
MOV AH, 9
INT 21H
NEXT:     MOV AH, 4CH
          INT 21H
C       ENDS
         END  BG
实验七
    试编写一源程序:屏幕显示“PASSWORD?,随后从键盘读入字符串,并比较这个字符串与程序内部设定的字符串。若二者相同则显示“OK”,否则不作任何显示
0DH是回车的ASCⅡ码)。
解:  程序如下:
    D      SEGMENT
PASS1  DB '12AB'
N       EQU $-PASS1
    D1      DB 'PASSWORD?', 0DH, 0AH, '$'
            PASS2   DB 20
DB ?
DB 20 DUP(?)
D2      DB 0DH,0AH, 'OK$'
D       ENDS
C       SEGMENT 
ASSUME CS:C, DS:D, ES:D
 BG:    MOV AX,D
        MOV DS,AX
        MOV ES,AX
            LEA DX,D1
         MOV AH,9
INT 21H
LEA DX,PASS2
MOV AH,0AH
INT 21H
LEA SI,PASS1
LEA DI,PASS2
CMP BYTE PTR[DI+1],N

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