汇编语言:统计输出数组中的元素相对于某个定值的大小情况

汇编语言:统计输出数组中的元素相对于某个定值的大小情况

  • 题目要求
  • 编程平台
  • 代码实现

题目要求

要求事先在数据段事先定义的长度为100H字节的数组中,计算大于42H的无符号数的个数并存入字单元UP中,计算小于42H的无符号数的个数并存入字单元DOWN中,最终输出数组长度、UP和DOWN的值。

编程平台

Masm for Windows 集成实验环境 2012.5

代码实现

DATAS SEGMENT
    array DB 32 DUP(9H,17H,23H,37H,42H,5EH,6AH,70H);预先定义好数组
    count DW $-array;记录数组长度
    UP DW 0
    DOWN DW 0
    scale DW 10;以十进制数形式输出
    printALL DB 'ALL: $'
    printUP DB 13,10,'UP: $'
    printDOWN DB 13,10,'DOWN: $'
DATAS ENDS

STACKS SEGMENT STACK
    DB 200H DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
;主程序
MAIN PROC
    MOV AX,DATAS
    MOV DS,AX
    
    ;遍历数组,所有元素逐个与42H比较
    LEA SI,array;数组首地址
    MOV CX,count;数组长度
  l:
    LODSB;将DS:[SI]读到的字节放入AL
    CMP AL,42H
    JE e
    JB b
    INC UP
    JMP e
  b:
    INC DOWN
  e:
    LOOP l
    
    LEA DX,printALL;显示数组长度信息提示
    MOV AH,9H
    INT 21H
    MOV AX,count
    CALL SUBP;将AX以十进制形式输出
    
    LEA DX,printUP;显示数组中大于42H的元素数量信息提示
    MOV AH,9H
    INT 21H
    MOV AX,UP
    CALL SUBP;将AX以十进制形式输出
    
    LEA DX,printDOWN;显示数组中小于42H的元素数量信息提示
    MOV AH,9H
    INT 21H
    MOV AX,DOWN
    CALL SUBP;将AX以十进制形式输出
    
    MOV AH,4CH
    INT 21H
MAIN ENDP
;子程序
;功能:以十进制形式输出AX中的值。
;入口参数:AX存放要输出的字内容,字变量scale存放要使用的进制。
SUBP PROC
    MOV BX,scale
    MOV CX,0;记录要输出的位数
    
lop1:
    MOV DX,0
    DIV BX
    PUSH DX;余数入栈
    INC CX
    CMP AX,0;也可以写成OR AX,AX
    JNE lop1
    
lop2: 
    POP DX 
    ADD DL,30H;转换成对应的ASCII码
    MOV AH,2
    INT 21h
    LOOP lop2
    RET
SUBP ENDP
CODES ENDS
    END MAIN

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

你可能感兴趣的:(汇编语言,assembler)