10.

(1)MOV CX,TYPE DATA1

        CX为变量类型包含字节数,因为DATA1为DB型,有CX=1

(2)MOV CX,TYPE DATA3

        同理,DATA2为DW型,有CX=2

(3)MOV AL,LENGTH DATA2

       返回DATA2的长度(DUP),AL = 16 = 10H

(4)MOV AX,LENGTH DATA3

        AL = 05H

(5)MOV AX,SIZE DATA3

        SIZE = 0AH

11.

        ORG 0010H

        NUM1 DW 9637H

        NUM2 DB 'ABCD'

        NUM3 DW 1854H

        LEA SI,NUM1                          SI为NUM1的有效地址,SI=0010H

        MOV DI,OFFSET NUM2         DI为NUM的偏移地址,DI=0012H

        MOV AX,NUM3                       AX为[NUM3]所指单元内容送入,AX=1854H    

13.

(1)XX DB 11,31H,?,‘a’

 (2)YY DW 0ABH,2 DUP (3,2 DUP(0)),0CDH

 (3)ZZ DD 3579H

14.整体程序框图如下

        为求最小数程序,并最终存入RES

15.程序功能:将YY、XX的压缩BCD码装入ZZ中。

16.

        DATA SEGMENT

        X DD 453921F0H

        Y DD 123A6825H

        Z DW 0A86H

        A DW ?

        B DW ?

        DATA ENDS

        CODE SEGMENT

        ...

        MOV AX,WORD PTR X                ;AX为X低位

        MOV DX,WORD PTR X+2            ;DX为X高位

        SUB AX,WORD PTR Y

        SBB DX,WORD PTR Y+2             ;整体为X-Y

        SBB AX,29D                                  ;X-Y-29D

        SBB DX,0                                      ;减去可能借位

        DIV Z                                             ;除以Z

        MOV A,AX                                     ;商放A中

        MOV B,BX                                     ;余数放B中

        ...

        CODE ENDS

        整体实现的功能为:完成(X-Y-29D)/Z的操作后将商放入A中,余数放入B中。

19.求出所给数中的最大最小值。

DATA SEGMENT
    DATA_LIST DW -1, 0, 2, 5, 4, 5 DUP(0)   ;define 10L array
    ORG 0030H
    STRMAX DB 'MAX=','$'
    STRMIN DB 'MIN=','$'
    KONG   DB 0AH,'$'
    MAX DW ?    ;define MAX
    MIN DW ?    ;define MIN
DATA ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACKS
START:
    MOV AX,DATA
    MOV DS,AX
    MOV CX,05H          ;find MIN
    LEA SI,DATA_LIST
    MOV AX,[SI]
LP1:
    CMP AX,[SI+2]
    JNG NEXT1
    MOV AX,[SI+2]
NEXT1:
    INC SI
    INC SI
LOOP LP1
MOV MIN,AX      
PUSH AX
CALL STR2               ;print str
POP AX
CALL PRINT              ;print min
CALL STR3
MOV CX,05H              ;find MAX
LEA SI,DATA_LIST
MOV AX,[SI]
LP2:
    CMP AX,[SI+2]
    JGE NEXT2
    MOV AX,[SI+2]
NEXT2:
    INC SI
    INC SI
LOOP LP2
MOV MAX,AX
CALL STR1               ;print str
MOV AX,MAX
CALL PRINT              ;print max

MOV AH,4CH
INT 21H

PRINT PROC NEAR         ;proc to print number
  MOV BX,10
  TEST AX,8000H 
  JZ POSETIVE         
  PUSH AX        
  MOV AX,0E2DH   
  INT 10H
  POP AX
  NEG AX
POSETIVE:
  MOV DX,0
  XOR CX,CX
Q0:
  XOR DX,DX
  DIV BX
  XOR DX,0E30H
  PUSH DX
  INC CX
  CMP AX,0
  JNZ Q0
Q1:
  POP AX
  INT 10H
  LOOP Q1
  RET
PRINT ENDP

STR1 PROC NEAR          ;proc to print str
MOV AX, SEG STRMAX
MOV DS, AX
MOV DX, OFFSET STRMAX
MOV AH, 09H
INT 21H
RET
STR1 ENDP

STR2 PROC NEAR          ;proc to print str
MOV AX, SEG STRMIN
MOV DS, AX
MOV DX, OFFSET STRMIN
MOV AH, 09H
INT 21H
RET
STR2 ENDP

STR3 PROC NEAR          ;proc to print str
MOV AX, SEG KONG
MOV DS, AX
MOV DX, OFFSET KONG
MOV AH, 09H
INT 21H
RET
STR3 ENDP

CODE ENDS
END START

结果如图:

21.两个八字节数相加并观察。

DATAS  SEGMENT 

DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
    ASSUME    CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,2000H
    MOV DS,AX
    MOV SI,50H  ;20050
    MOV DI,58H  ;20058
    MOV BX,60H  ;20060
    MOV CX,4    ;2BYTE/TIME,8/2=4
    CLC
LP1:
    MOV AX,[SI]
    ADC AX,[DI]
    MOV [BX],AX
    PUSHF
    ADD SI,2
    ADD DI,2
    ADD BX,2
    POPF
    LOOP LP1
    MOV AH,4CH
    INT 21H
CODES  ENDS
    END  START

结果如图:

22.通过屏幕显示功能(BIOS)输出‘HELLO WORLD’

DATAS  SEGMENT 
   STR DB 'HELLO WORLD!'
DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV SI,OFFSET STR
    MOV CX,1

    MOV AH,0FH          ;PAGE NUM TO BH
    INT 10H

    MOV AH,0            ;define screen
    MOV AL,2
    INT 10H

    MOV DX,0
LP1:MOV AH,2
    INT 10H
    MOV AH,0AH
    MOV AL,[SI]
    INT 10H
    INC DL
    INC SI
    CMP DL,12
    JNE LP1
    MOV AH,4CH
    INT 21H
CODES  ENDS
    END  START

结果如图:

24.完成十进制到十六进制的转换。

DATAS  SEGMENT 
   STR1 DB 'Input a decimal num:','$'
   STR2 DB 'Hex Num is:','$'
   STR3 DB 'Wrong number!!',13,10,'$'
   FLAG DB ?
DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS

MAIN PROC FAR
    MOV AX,DATAS
    MOV DS,AX
    MOV CX,10
    MOV FLAG,0

START:
    LEA DX,STR1
    MOV AH,09H      ;OUTPUT GUIDE WORD
    INT 21H
    
    CALL INPUT
    CMP FLAG,1
    JE EXIT1

    CALL HCHH       ;OUTPUT THE ANSWER
    LEA DX,STR2
    MOV AH,09
    INT 21h

    CALL HEX
    MOV AH,2
	MOV DL,'H'      ;H
        INT 21H
    MOV AH,2
    CALL HCHH

    LOOP START
EXIT1:
    RET
MAIN ENDP

INPUT PROC near
    MOV BX,0
    PUSH CX
CHAR:
    MOV AH,1        ;INPUT NUMBER
    INT 21H
    CMP AL,13       ;JUDGEMENT
    JE EXIT2

    SUB AL,30h      ;NOT A NUMBER
    JL ERR

    CMP AL,9D
    JG ERR

    CBW

    XCHG AX,BX
    MOV CX,10D

    MUL CX
    XCHG AX,BX
    ADD BX,AX
    JMP CHAR
ERR:
    CALL HCHH

    LEA DX,STR3
    MOV AH,09
    INT 21h

    MOV FLAG,1
EXIT2:
    POP CX
    RET
INPUT ENDP

HEX PROC near
    PUSH CX
    MOV CH,4
TRANS:
    MOV CL,4
    ROL BX,CL

    MOV AL,BL
    AND AL,0FH
    ADD AL,30h
    CMP AL,3ah      ;>9?

    JL PRINT 
    ADD AL,7h       ;TRANS TO ZIMU
PRINT:
    MOV DL,AL
    MOV AH,2
    INT 21H 
    DEC CH
    JNZ TRANS
    POP CX
    RET
HEX ENDP

HCHH PROC near
    MOV DL,0DH 
    MOV AH,2
    INT 21H 
    MOV DL,0AH 
    MOV AH,2
    INT 21H 
    RET
HCHH ENDP
CODES  ENDS
    END  MAIN

结果如图:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐