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

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

题目要求

要求事先在数据段事先定义的长度为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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值