我是靠谱客的博主 包容美女,最近开发中收集的这篇文章主要介绍汇编一日一学(10)--正负数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

;编写程序,将一个包含有20个数据的数组M分成两个数组:

;正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。       ;写一个二进制转化为十进制

DATAS SEGMENT

      COUNT     EQU 20

      COUNT1    DB 0           ;存放正数的个数

      COUNT2    DB 0           ;存放负数的个数

      ARRAY     DW 4 DUP(-3,-1111,-23,-41,5)   ;存放数组

      ARRAY1    DW 20 DUP(?)   ;存放正数

      ARRAY2    DW 20 DUP(?)   ;存放负数

      ZHEN                DB  0DH, 0AH, 'The positive number is:', '$'        ;正数的个数是:

      FU                DB  0DH, 0AH, 'The negative number is:', '$'         ;负数的个数是:

      CRLF                DB  0DH, 0AH, '$'

 

DATAS ENDS

 

;STACKS SEGMENT

;      DW   256 DUP(?)

;STACKS ENDS    

 

CODES SEGMENT

     MAIN PROC FAR

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

START:        

        PUSH        DS                                ;设置返回DOS

        SUB                AX, AX

        PUSH        AX

        MOV            AX, DATAS

        MOV            DS, AX                        ;给DS赋值 

        ;MOV AX, STACKS

       ;MOV SS, AX

 

BEGIN:                MOV            CX, COUNT

            LEA                BX, ARRAY

            LEA                SI, ARRAY1

            LEA                DI, ARRAY2

BEGIN1:            MOV            AX, [BX]

            CMP            AX, 0                        ;是负数码?

            JS                FUSHU

            MOV            [SI], AX                        ;是正数,存入正数数组

            INC                COUNT1                        ;正数个数+1

            ADD         SI, 2

            JMP                SHORT  NEXT

FUSHU:            MOV            [DI], AX                        ;是负数,存入负数数组

            INC                COUNT2                        ;负数个数+1

            ADD            DI, 2

NEXT:                ADD            BX, 2

            LOOP        BEGIN1

            LEA                DX, ZHEN                ;显示正数个数

            MOV            AL, COUNT1

            CALL        DISPLAY                ;调显示子程序

            LEA                DX, FU                        ;显示负数个数

            MOV            AL, COUNT2

            CALL        DISPLAY                ;调显示子程序

            RET

MAIN                ENDP

;--------------------------------------------------------------------------

DISPLAY        PROC        NEAR                        ;显示子程序

            PUSH    AX

            MOV            AH, 9                ;显示一个字符串的DOS调用

            INT                21H 

            POP     AX

            AAM                                        ;将(AL)中的二进制数转换为二个非压缩BCD码 

            MOV     CL, AL

            ADD            AH, '0'                        ;变为0~9的ASCII码

            MOV            DL, AH

            MOV            AH, 2                        ;显示一个字符的DOS调用

            INT                21H

            ADD            CL, '0'                        ;变为0~9的ASCII码

            MOV            DL, CL

            MOV            AH, 2                        ;显示一个字符的DOS调用

            INT                21H

            LEA                DX, CRLF        ;显示回车换行

            MOV            AH, 9                        ;显示一个字符串的DOS调用

            INT                21H

            RET

DISPLAY        ENDP                                        ;显示子程序结束

CODES                ENDS                                ;以上定义代码段

;--------------------------------------------------------------------------

            END        START

 

equ是一个代码替换指令比如:s equ bx+simov cx,[s]那么上面两句代码相当于如下指令:mov cx,[bx+si]

 

//

汇编语言教程-ASCII码乘调整指令AAM

3、ASCII码乘调整指令AAM(Ascii Adjust After Multiplication)

该指令是用于调整寄存器AL之值,该值是由二个单BCD码字节用无符号乘指令MUL所得的积。其调整规则如下:

AH←AL/10(商),AL←AL%10(余数)

指令的格式:AAM

受影响的标志位:PF、SF和ZF(AF、CF和OF等都是无定义)

例如:

MOVAL, 9

MOVBL, 8

MULBL;AL=72D

AAM;AH=7, AL=2

4、ASCII码除调整指令AAD(Ascii Adjust After Division)

该指令是在作除法前用于调整寄存器AH和AL之值,它是把二个寄存器中单BCD码组成一个十进制数值,为下面的除法作准备的。其调整规则如下:

AL←AH*10+AL,AH←0

指令的格式:AAD

受影响的标志位:PF、SF和ZF(AF、CF和OF等都是无定义)

例如:

MOVAX, 0502H

MOVBL, 10D

AAD;AH=0, AL=52D

DIV BL;AH=2(余数), AL=5(商)

最后

以上就是包容美女为你收集整理的汇编一日一学(10)--正负数组的全部内容,希望文章能够帮你解决汇编一日一学(10)--正负数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部