概述
;编写程序,将一个包含有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)--正负数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复