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
相关产品推荐
相关产品推荐

