用汇编语言求10个数中奇数的最小值,请大神指点一下我的代码,如果错了,帮我改正一下。谢谢!
DATASEGMENTARMDB1,2,3,4,5,6,7,8,9,10COUNTEQU$-ARMMINDB?DATAENDSCODESEGMENTASSUMECS:CO...
DATA SEGMENT
ARM DB 1,2,3,4,5,6,7,8,9,10
COUNT EQU $-ARM
MIN DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARM
MOV CL,COUNT
MOV CH,0H
MOV MIN,9D
LOP: MOV AL,[SI]
INC SI
TEST AL,01H
JNZ LOP1
LOOP LOP
JMP LOP3
LOP1: CMP AL,MIN
JB LOP2
LOOP LOP
LOP2: MOV MIN,AL
LOOP LOP
LOP3: MOV AH,02H
INT 21H
CODE ENDS
END START 展开
ARM DB 1,2,3,4,5,6,7,8,9,10
COUNT EQU $-ARM
MIN DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARM
MOV CL,COUNT
MOV CH,0H
MOV MIN,9D
LOP: MOV AL,[SI]
INC SI
TEST AL,01H
JNZ LOP1
LOOP LOP
JMP LOP3
LOP1: CMP AL,MIN
JB LOP2
LOOP LOP
LOP2: MOV MIN,AL
LOOP LOP
LOP3: MOV AH,02H
INT 21H
CODE ENDS
END START 展开
2个回答
展开全部
DATA SEGMENT
ARM DB 1,2,3,4,5,6,7,8,9,10
COUNT EQU $-ARM
MIN DB ? ;不能用中文字符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET ARM
MOV CL,COUNT
MOV CH,0H
MOV MIN,9D ;这个数应该改得大一些
LOP: MOV AL,[SI]
INC SI
TEST AL,01H
JNZ LOP1
LOOP LOP ;1.这种代码比较混乱
JMP LOP3
LOP1: CMP AL,MIN
JB LOP2
LOOP LOP ;2.这种代码比较混乱
LOP2: MOV MIN,AL
LOOP LOP ;3.这种代码比较混乱
LOP3:
mov dl,min ;需要把输出的字符放在dl中,
add dl,30h ;转换为ASCII码值,这种输出只能输出0-9的数,
MOV AH,02H ;超过10的,需要使用其它方法
INT 21H
mov ah,4ch ;需要加上退出代码
int 21h
CODE ENDS
END START
下面是我回答别人时写的。
Assume cs:code, ds:data
data segment
dat db 12,110,130,14,82,12,56,72
cnt equ $-dat
m db 127
c db 0
s db 'The minimum number is :$'
s1 db 'No odd number found.$'
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si,0
mov cx, cnt
L1:
mov al,dat[si]
test al, 1
jz L2 ;even number, next
inc c
cmp al,m
ja L2
mov m, al
L2:
inc si
loop L1
cmp c, 0
jNz Found
lea dx,s1
mov ah,9
int 21h
jmp exit
Found:
lea dx, s
mov ah,9
int 21h
mov al, m
xor ah,ah
call print
exit:
mov ah,4ch
int 21h
print proc near
mov bx,10
xor cx,cx
Q0:
xor dx,dx
div bx
or dx,0e30h
push dx
inc cx
cmp ax,0
jnz Q0
Q1:
pop ax
int 10h
loop Q1
ret
print endp
code ends
end start
啊!!!,不好意思,才发现上一次回答得也是你的提问。
来自:求助得到的回答
展开全部
DATA SEGMENT
; ARM DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
ARM DB 87, 62, 14, 33, 65, 82, 8, 9, 71, 55
COUNT EQU $ - ARM
MIN DB 255
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET ARM
MOV CX, COUNT
MOV MIN, 255
LOP:
MOV AL,[SI]
INC SI
TEST AL,01H
JZ LOP1 ;偶数则转移
CMP AL, MIN
JNB LOP1
MOV MIN, AL
LOP1:
LOOP LOP
MOV AL, MIN
MOV AH, 0
MOV BL, 100
DIV BL
MOV DL, AL
ADD DL, '0'
PUSH AX
MOV AH, 02H ;显示百位
INT 21H
POP AX
MOV AL, AH
MOV AH, 0
MOV BL, 10
DIV BL
MOV DL, AL
ADD DL, '0'
PUSH AX
MOV AH, 02H
INT 21H ;显示十位
POP AX
EXIT:
MOV DL, AH
ADD DL, '0'
MOV AH, 02H ;显示个位
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
; ARM DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
ARM DB 87, 62, 14, 33, 65, 82, 8, 9, 71, 55
COUNT EQU $ - ARM
MIN DB 255
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET ARM
MOV CX, COUNT
MOV MIN, 255
LOP:
MOV AL,[SI]
INC SI
TEST AL,01H
JZ LOP1 ;偶数则转移
CMP AL, MIN
JNB LOP1
MOV MIN, AL
LOP1:
LOOP LOP
MOV AL, MIN
MOV AH, 0
MOV BL, 100
DIV BL
MOV DL, AL
ADD DL, '0'
PUSH AX
MOV AH, 02H ;显示百位
INT 21H
POP AX
MOV AL, AH
MOV AH, 0
MOV BL, 10
DIV BL
MOV DL, AL
ADD DL, '0'
PUSH AX
MOV AH, 02H
INT 21H ;显示十位
POP AX
EXIT:
MOV DL, AH
ADD DL, '0'
MOV AH, 02H ;显示个位
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
更多追问追答
追问
我的电脑上不能运行汇编程序。能不能帮我测试一下结果,告诉我。如果有错误,能不能改正一下。谢谢。我的电脑提示无法运行MASM
追答
呵呵,你无法运行MASM,你怎么判断谁的答案正确?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |