汇编一日一学(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(?) ;存放负数

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

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

CRLFDB 0DH, 0AH, '$'

DATAS ENDS

;STACKS SEGMENT

; DW 256 DUP(?)

;STACKS ENDS

CODES SEGMENT

MAIN PROC FAR

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

START:

PUSHDS;设置返回DOS

SUBAX, AX

PUSHAX

MOV AX, DATAS

MOV DS, AX;给DS赋值

;MOV AX, STACKS

;MOV SS, AX

BEGIN:MOV CX, COUNT

LEABX, ARRAY

LEASI, ARRAY1

LEADI, ARRAY2

BEGIN1: MOV AX, [BX]

CMP AX, 0;是负数码?

JSFUSHU

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

INCCOUNT1;正数个数+1

ADD SI, 2

JMPSHORT NEXT

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

INCCOUNT2;负数个数+1

ADD DI, 2

NEXT:ADD BX, 2

LOOPBEGIN1

LEADX, ZHEN;显示正数个数

MOV AL, COUNT1

CALLDISPLAY;调显示子程序

LEADX, FU;显示负数个数

MOV AL, COUNT2

CALLDISPLAY;调显示子程序

RET

MAINENDP

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

DISPLAYPROCNEAR;显示子程序

PUSH AX

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

INT21H

POP AX

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

MOV CL, AL

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

MOV DL, AH

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

INT21H

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

MOV DL, CL

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

INT21H

LEADX, CRLF;显示回车换行

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

INT21H

RET

DISPLAYENDP;显示子程序结束

CODESENDS;以上定义代码段

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

ENDSTART

////////////////////////////////////////////////////////////

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(商)

你可能感兴趣的:(数组)