8086汇编语言学习实验3个程序及运行结果

来源:互联网 发布:淘宝标品系统 编辑:程序博客网 时间:2024/05/02 00:23
刚开始学8086,汇编语言似乎比起C语言难很多,往往一个实验程序就让人摸不着头脑,下面是我修改的程序,大家参考一下
1·将一个或两字节数相加,并显示累加和
(设N1=1122H,N2=3344H,N3=5566H,计算并以二进制形式显示这三个熟的累加和)
2·使S=1+2*3+3*4+…+n*(n+1),直到n*(n+1)项大于200为止
3·设置一个数据段,定义存放20个16位整数的表,求该表中正数,负数,0的个数,分别存放到Negnum,Posnum,Zeronum变量中。
 
程序清单如下:
1:
DATA SEGMENT
     NUM1 DW 1122H ;N1
     NUM2 DW 3344H ;N2
     NUM3 DW 5566H ;N3
DATA ENDS
STACK SEGMENT STACK 'STACK'
     DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEG: MOV AX,DATA
        MOV DS,AX
        MOV SI,OFFSET NUM1
        CALL COMPUTER
DISP: CALL DISPLAY
EXIT: MOV AH,4CH
         INT 21H
COMPUTER PROC
         MOV BX,0
         ADD BX,[SI+0]
         ADD BX,[SI+2]
         ADD BX,[SI+4]
         RET
COMPUTER ENDP
DISPLAY PROC
         PUSH AX
         PUSH CX
         PUSH DX
         MOV CX,16;
LAST:MOV DL,'0';
        RCL BX,1
        JNC NEXT;
        MOV DL,'1';
NEXT: MOV AH,2
         INT 21H
         LOOP LAST
         POP DX
         POP CX
         POP AX
         RET;
DISPLAY ENDP
CODE ENDS
END BEG
***********************************************************************************
2:STACK  SEGMENT  STACK
           DB  32 DUP(?)
STACK  ENDS
CODE   SEGMENT
ASSUME CS:CODE
START:MOV    DX,0001H
           MOV    BL,02H
      A1: MOV    AL,BL
            INC      BL
            MUL     BL
            ADD     DX,AX
            CMP     AX,00C8H
            JNA     A1
            INT      03H
     CODE   ENDS
     END     START
********************************************************************************
-U
0B6A:0000 BA0100        MOV     DX,0001
0B6A:0003 B302          MOV     BL,02
0B6A:0005 8AC3          MOV     AL,BL
0B6A:0007 FEC3          INC     BL
0B6A:0009 F6E3          MUL     BL
0B6A:000B 03D0          ADD     DX,AX
0B6A:000D 3DC800        CMP     AX,00C8
0B6A:0010 76F3          JBE     0005
0B6A:0012 CC            INT     3
0B6A:0013 83C406        ADD     SP,+06
0B6A:0016 B8CD05        MOV     AX,05CD
0B6A:0019 50            PUSH    AX
0B6A:001A 8D8600FF      LEA     AX,[BP+FF00]
0B6A:001E 50            PUSH    AX
0B6A:001F E8CA0C        CALL    0CEC
-G=0B6A:0000
AX=00D2  BX=000F  CX=0033  DX=045F  SP=0020  BP=0000  SI=0000  DI=0000
DS=0B58  ES=0B58  SS=0B68  CS=0B6A  IP=0012   NV UP EI PL NZ AC PE NC
0B6A:0012 CC            INT     3
****************************************************************************************
3:
STACK SEGMENT   STACK
              DW  64   DUP(?)
STACK     ENDS
DATA      SEGMENT
TABLE     DW  20
              DW -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9
NEGNUM  DW  0
POSNUM  DW  0
ZERONUM DW  0
DATA ENDS
CODE SEGMENT
ASSUME  CS:CODE,DS:DATA
START: MOV  CX,DATA
        MOV  DS,CX
        MOV  DI,OFFSET TABLE
        XOR   BL,BL
        XOR   DL,DL
     XOR   AL,AL
  MOV  CX,20
        JCXZ DONE
 LEA  DI,TABLE+2
CMPNUM: CMP WORD PTR[DI],0
        JGE A1
 INC BL
 JMP TONEXT
A1: JE   A2
        INC AL
        JMP TONEXT
A2:     INC  DL
TONEXT: INC  DI
        INC  DI
 LOOP CMPNUM
DONE:
 MOV  NEGNUM,AX 
 MOV  POSNUM,BX
 MOV  ZERONUM,DX
              INT  3
CODE   ENDS
END     START
************************************************************************************
-U
0B73:0000 B9700B        MOV     CX,0B70
0B73:0003 8ED9          MOV     DS,CX
0B73:0005 BF0000        MOV     DI,0000
0B73:0008 32DB          XOR     BL,BL
0B73:000A 32D2          XOR     DL,DL
0B73:000C 32C0          XOR     AL,AL
0B73:000E B91400        MOV     CX,0014
0B73:0011 E31B          JCXZ    002E
0B73:0013 8D3E0200      LEA     DI,[0002]
0B73:0017 833D00        CMP     WORD PTR [DI],+00
0B73:001A 7D05          JGE     0021
0B73:001C FEC3          INC     BL
0B73:001E EB0A          JMP     002A
-G=0B73:0000
AX=0009  BX=000A  CX=0000  DX=0001  SP=0080  BP=0000  SI=0000  DI=002A
DS=0B70  ES=0B58  SS=0B68  CS=0B73  IP=0039   NV UP EI PL NZ NA PO NC
0B73:0039 CC            INT     3
-
原创粉丝点击