;编写程序,将一个包含有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(商)