这是我的代码,它应该以找到最小数字的方式对数组进行排序但是当我在8086程序集上运行时我没有看到任何结果或其他任何东西,但我猜问题是我的代码无法摆脱循环或类似的东西是正确的吗? 我再次说我的代码问题是它没有在窗口上显示任何结果,我的程序必须找到数组中的第二个最小数字。有人帮我修复它吗?
org 100h
; add your code here
DATA SEGMENT
ARR DB 5,3,7,1,9,2,6,8,4
LEN DW $-ARR
SMALL DB ?
SECOND DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA CS:CODE
START:
MOV AX,DATA
MOV DS,AX
LEA SI,ARR
MOV AL,ARR[SI]
MOV SMALL,AL
MOV CX,LEN
REPEAT1:
MOV AL,ARR[SI]
CMP SMALL,AL
JL NOCHANGE
MOV SMALL,AL
NOCHANGE:
INC SI
LOOP REPEAT1
LEA SI,ARR
MOV AL,ARR[SI]
MOV SECOND,AL
MOV CX,LEN
REPEAT2:
MOV AL,ARR[SI]
CMP SECOND,AL
JL SKIP
CMP SMALL,AL
JGE SKIP
MOV SECOND,AL
SKIP:
INC SI
LOOP REPEAT2
MOV AH,4CH
INT 21H
CODE ENDS
END START
ret
答案 0 :(得分:0)
我想知道你班上的这一点是否应该能够输出数字,而不是在运行调试器时查看寄存器值。
作为替代方法,将注释行插入代码中以将值作为错误代码返回:
LOOP REPEAT2
MOV AH,4CH
MOV AL,SECOND ;insert this line
INT 21H
CODE ENDS
END START
组装并链接程序后,从DOS控制台窗口(命令提示符)运行它。假设你将它命名为#34; myprogram.com"。然后使用以下命令:
myprogram
echo %errorlevel%
当使用AH = 4CH和INT 21H时,errorlevel是AL中的值。这仅适用于单字节值,但这就是你在这种情况下所拥有的。
否则,您必须添加代码才能将值转换为十进制并输出结果。如果这些是数字值,则输出代码很简单:
MOV DL,SECOND
ADD DL,030H
MOV AH,002H
INT 21H
MOV DL,00DH
MOV AH,002H
INT 21H
MOV DL,00AH
MOV AH,002H
INT 21H
或使用字符串:
SECOND DB ?
STRNG DB 000H,00DH,00AH,'$' ;insert this line
...
MOV AL,SECOND
ADD AL,30
MOV STRNG,AL
MOV DX,OFFSET STRNG
MOV AH,009H
INT 21H