You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TASM如何比较数组元素与输入变量 统计小于该值的数组元素数量

TASM汇编统计数组小于输入值元素总数实现方案

原有代码核心问题

  • 数据读取错误:数组定义为db单字节类型,代码使用mov ax, [bx]读取双字节数据,读取结果与实际元素值不符
  • 比较对象错误:未将数组元素与用户输入的数值比较,错误和立即数0进行比较
  • 循环逻辑错误:将用户输入的数值赋值给cl作为循环次数,而非数组的实际元素个数;遍历数组时地址偏移加4,与单字节元素的1字节偏移要求不符
  • 判断跳转逻辑错误:现有跳转条件完全不符合「统计小于输入值元素」的需求

修正后完整代码

.model small
.stack 100h
.data
array db 1, 2, 3, 4, 7, 5, 6
arr_len equ $ - array ; 自动计算数组元素个数
n db 3, ?, 3 dup(?) 
input_num db 0 ; 存储用户输入转换后的数值
counter dw 0
.code
StrToNumber PROC 
    ; 注:当前转换逻辑默认用户输入为两位十进制数
    mov bh, [si + 2]
    mov bl, [si + 3]
    sub bx, 3030h
    mov al, 10
    mul bh
    add al, bl 
    ret
ENDP
start: 
mov ax,@data
mov ds, ax

; 读取用户输入
mov ah, 0Ah
lea dx, n
int 21h

; 转换输入为数值并存储
lea si, n
call StrToNumber
mov [input_num], al 

; 初始化循环计数器和数组指针
mov cx, arr_len
lea bx, array
beg:
mov al, [bx]
cmp al, [input_num]
jge skip ; 元素大于等于输入值则跳过计数
inc [counter] ; 小于则计数加1
skip:
    inc bx ; 单字节元素偏移1字节
    loop beg

exit:
mov ax,4c00h
int 21h
end start

补充说明

如果需要支持用户输入1位数字,可在字符串转数字逻辑前读取n+1地址存储的实际输入字符长度,根据长度调整转换逻辑即可。

内容的提问来源于stack exchange,提问作者Utis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:54:04