【谷粒商城项目源码】【英雄联盟系统源码】【成吉思汗ol全套源码】8086汇编源码_8086汇编代码

时间:2024-11-30 14:40:06 来源:完美源码授权 编辑:证券资讯app源码

1.8086模拟器8086tiny源码分析(3)剩下的汇编汇编mov指令
2.8086————汇编语言程序代码———数据查找?

8086汇编源码_8086汇编代码

8086模拟器8086tiny源码分析(3)剩下的mov指令

       深入分析模拟器中的mov指令

       首先解析mov [bx],ax指令,指令码显示源寄存器为ax,源码并且目的代码寄存器为[bx],故此为mov [bx],汇编汇编ax

       紧接着,分析mov [bx],源码谷粒商城项目源码h。通过指令码,代码英雄联盟系统源码可以明确得知此指令将立即数写入内存,汇编汇编目的源码操作数为[bx],即mov [bx],代码h

       接着是mov bx,h。指令码表明该指令将立即数写入寄存器bx,汇编汇编故此为mov bx,源码h

       分析mov [h],ax。指令码指示该指令将数据写入内存地址0x,代码故为mov [h],汇编汇编成吉思汗ol全套源码ax

       随后是mov ax, [h]。指令码说明此指令将内存地址0x的源码数据读入ax寄存器,故mov ax,代码 [h]

       至此,关于mov指令的分析结束。读者现在应能自行处理CPU指令码到汇编语言的柠檬视频APP源码转换。掌握此技能,为模拟CPU奠定了坚实的基础。

————汇编语言程序代码———数据查找?

       ; 从键盘输入N+1个数,对前N个数进行选择排序,图片转直链源码再用折半查找判断第N+1个数是否在前N个数中,输出结果。

       ; 输入数据最大为位

               CODE  SEGMENT

                     ASSUME    CS:CODE

             START:  PUSH      CS

                     POP       DS

                     PUSH      CS

                     POP       ES

                     CALL      INPUTNUM

                     LEA       DI,@ARRAY

                     MOV       CX,@NUM

                     DEC       CX

                     CALL      SELECTSORT

                     MOV       AH,2

                     MOV       DL,

                     INT       H

                     MOV       DL,

                     INT       H

                     LEA       SI,@ARRAY

                     MOV       CX,@NUM

                     DEC       CX

                     CMP       CX,0

                     JZ        @EXIT

                     CLD

                @1:

                     LODSW

                     CALL      DSPAXS

                     LOOP      @1

                     MOV       AH,2

                     MOV       DL,

                     INT       H

                     MOV       DL,

                     INT       H

                     LEA       SI,@ARRAY

                     MOV       CX,@NUM

                     DEC       CX

                     MOV       BX,CX

                     SHL       BX,1

                     ADD       BX,SI

                     

                     CALL      FIND

                     CALL      DSPAXS

             @EXIT:

                     MOV       AH,4CH

                     INT       H

       ;==============================================================

       ; 查找的 元素地址 在 bx,数组首地址 为 si , 元素个数为 cx 

       ; 若找到 ax=找到的序号(从0开始), 否则 ax=-1 (FFFF) 

               FIND  PROC      NEAR

                     PUSH      BX

                     PUSH      CX

                     PUSH      DX

                     PUSH      SI

                     PUSH      DI

                     PUSHF

                     MOV       @X0_F,0

                     MOV       @X1_F, CX

                     DEC       WORD PTR @X1_F

                     

                     MOV       AX,@X0_F

                     SHL       AX,1

                     ADD       AX,SI

                     MOV       DI,AX

                     MOV       AX,[DI]

                     MOV       @Y0_F,AX

                     

                     MOV       AX,@X1_F

                     SHL       AX,1

                     ADD       AX,SI

                     MOV       DI,AX

                     MOV       AX,[DI]

                     MOV       @Y1_F,AX

                     

            @FIND0:

                     MOV       AX,@X1_F

                     SUB       AX,@X0_F

                     CMP       AX,1

                     JL        @FINDORNO1

                     JE        @FINDORNO2

                     MOV       AX,@X0_F

                     ADD       AX,@X1_F

                     SHR       AX,1

                     MOV       @XX_F,AX

                     SHL       AX,1

                     ADD       AX,SI

                     MOV       DI,AX

                     MOV       AX,[DI]

                     MOV       @YY_F,AX

                      

                     MOV       DX,@YY_F

                     MOV       AX,@XX_F    ;======

                     CMP       [BX],DX

                     JE        @FINDEXIT

                     JG        @FIND1

                     

                     MOV       AX,@XX_F

                     MOV       @X0_F,AX

                     MOV       AX,@YY_F

                     MOV       @Y0_F,AX

                     JMP       @FIND0

            @FIND1:

                     MOV       AX,@XX_F

                     MOV       @X1_F,AX

                     MOV       AX,@YY_F

                     MOV       @Y1_F,AX

                     JMP       @FIND0

         @FINDEXIT:

                     POPF

                     POP       DI

                     POP       SI

                     POP       DX

                     POP       CX

                     POP       BX

                     RET

        @FINDORNO1:

                     MOV       AX,@X0_F

                     MOV       DX,@Y0_F

                     CMP       [BX],DX

                     JE        @FINDEXIT

                     MOV       AX,-1

                     JMP       @FINDEXIT

        @FINDORNO2:

                     MOV       AX,@X0_F

                     MOV       DX,@Y0_F

                     CMP       [BX],DX

                     JE        @FINDEXIT

                     MOV       AX,@X1_F

                     MOV       DX,@Y1_F

                     CMP       [BX],DX

                     JE        @FINDEXIT

                     MOV       AX,-1

                     JMP       @FINDEXIT

              @X0_F  DW        0

              @X1_F  DW        0

              @XX_F  DW        0

              @Y0_F  DW        0

              @Y1_F  DW        0

              @YY_F  DW        0

               FIND  ENDP

       ;===============================================================

       ;  键盘输入数值数组子程序(数组名为@array,元素个数存放在@num中)

       ;  可以是负数

       ;  采用字符串缓冲输入,避免原来键入后不能回退修改的问题 ! 

           INPUTNUM  PROC      NEAR

                     PUSH      AX

                     PUSH      BX

                     PUSH      CX

                     PUSH      DX

                     PUSH      SI

                     PUSH      DI

                     PUSHF

             ; 对数组@array清零

                     MOV       CX,

                     MOV       AX,0

                     LEA       DI,@ARRAY

                     REP       STOSW

                     MOV       WORD PTR @NUM,0

             ; 输入的数据以一个空格分隔,以回车符结束输入

                     LEA       DX,@STRA

                     MOV       AH,

                     INT       H

                     MOV       CL,@STRN

                     MOV       CH,0

                     MOV       WORD PTR @STRM,CX

                     LEA       SI,@STR

                     CLD

                     

                     LEA       DI,@ARRAY

                     MOV       WORD PTR @NUM,0

             @STIN:

                     MOV       AX,0

                     PUSH      AX

                     MOV       BYTE PTR @SIGNN,0

           @AGAIN1:

                     CMP       WORD PTR @STRM,0

                     JE        @LINE0

                     LODSB

                     DEC       WORD PTR @STRM

                     CMP       AL,' '

                     JE        @LINE0

                     CMP       AL,'-'

                     JNE       @INPUT1

                     MOV       BYTE PTR @SIGNN,1

                     JMP       @AGAIN1

           @INPUT1:

                     SUB       AL,H

                     MOV       AH,0

                     MOV       BX,AX

                     POP       AX

                     MOV       CL,

                     MOV       CH,0

                     MUL       CX

                     ADD       AX,BX

                     PUSH      AX

                     JMP       @AGAIN1

            @LINE0:

                     POP       AX

                     CMP       BYTE PTR @SIGNN,1

                     JNE       @INPUT2

                     NEG       AX

           @INPUT2:

                     MOV       WORD PTR[DI],AX

                     INC       WORD PTR @NUM

                     CMP       WORD PTR @STRM,0

                     JE        @STINEND

                     INC       DI

                     INC       DI

                     JMP       @STIN

          @STINEND:

                     POPF

                     POP       DI

                     POP       SI

                     POP       DX

                     POP       CX

                     POP       BX

                     POP       AX

                     RET

              @STRA  DB        

              @STRN  DB        ?

               @STR  DB         DUP(?)

              @STRM  DW        0

             @ARRAY  DW         DUP(0)

               @NUM  DW        0

              @CHAR  DB        ?

             @SIGNN  DB        0

           INPUTNUM  ENDP

       ;=========================================

         SELECTSORT  PROC      NEAR

                     ; 数组起始地址 存入 di,元素个数 存入 cx  

                     PUSH      AX

                     PUSH      BX

                     PUSH      CX

                     PUSH      DX

                     PUSH      SI

                     PUSH      DI

                     PUSHF

                     CMP       CX,1

                     JE        @@SELE5

                     DEC       CX          ; ################

                     MOV       BX,0

           @@SELE1:

                     PUSH      CX

                     MOV       SI,DI

                     INC       SI

                     INC       SI          ; { SI=DI+2}

                     PUSH      DI          ;{ 保存DI }

                     MOV       AX,[DI][BX] ; { 假设MAX 为第一个}

           @@SELE2:  MOV       DX,[SI][BX] ; { 存储器到寄存器,节省时间}

                     CMP       AX,DX

                     JGE       @@SELE3     ; 从大到小,有符号数排序   #################

                     MOV       DI,SI       ; { 小于时,将SI替换DI,即将J替换I, 保存MAXI}

                     MOV       AX,DX       ; { 保存MAX 到AX}

           @@SELE3:  INC       SI

                     INC       SI

                     LOOP      @@SELE2

                     MOV       SI,DI       ; { 还原SI,即将I替换J}

                     POP       DI          ; { 取出栈中保存的I}

                     CMP       DI,SI       ; { 与J 比较}

                     JE        @@SELE4     ;  { 相同时不交换}

                     MOV       AX,[DI][BX] ; { 在内循环之外交换}

                     XCHG      AX,[SI][BX]

                     MOV       [DI][BX],AX

           @@SELE4:  INC       BX

                     INC       BX

                     POP       CX

                     LOOP      @@SELE1

           @@SELE5:

                     POPF

                     POP       DI

                     POP       SI

                     POP       DX

                     POP       CX

                     POP       BX

                     POP       AX

                     RET

         SELECTSORT  ENDP

       ;==================================

       ; 输出有符号数,输出的数应放 ax中 

             DSPAXS  PROC      NEAR

                     PUSH      AX

                     OR        AX,AX

                     JNS       @DSPAXS

                     NEG       AX

                     PUSH      AX

                     PUSH      DX

                     MOV       AH,2

                     MOV       DL,'-'

                     INT       H

                     POP       DX

                     POP       AX

           @DSPAXS:

                     CALL      DSPAX

                     POP       AX

                     RET

             DSPAXS  ENDP

            

       ;===============================

              DSPAX  PROC      NEAR

                     PUSH      AX

                     PUSH      BX

                     PUSH      CX

                     PUSH      DX

                     PUSHF

                     XOR       CX,CX

                     MOV       BX,

           @DSPAX1:

                     XOR       DX,DX

                     DIV       BX

                     INC       CX

                     OR        DX,H

                     PUSH      DX

                     CMP       AX,0

                     JNE       @DSPAX1

                     MOV       AH,2

          @DISPAX2:

                     POP       DX

                     INT       H

                     LOOP      @DISPAX2

                     MOV       DL,

                     INT       H

                     POPF

                     POP       DX

                     POP       CX

                     POP       BX

                     POP       AX

                     RET

              DSPAX  ENDP

       ;================================  

        

               CODE  ENDS

                     END       START

copyright © 2016 powered by 皮皮网   sitemap