初学汇编 一小段代码 遇到点问题 谢谢大家

songkai2008 2009-05-14 07:35:49
实现从三个数中找最大的和最小的 我用比较笨的方法写的代码 就是先找出最大的 然后再写一遍 找最小的 生成.exe没问题 但是调试时写G=0,00XX时就有问题了 什么结果也没有 也没法再从键盘输入了 只能直接叉掉重进,,,,不知道是什么原因,,,,
SSEG SEGMENT STACK
STK DB 20 DUP(0)
SSEG ENDS
DSEG SEGMENT
DATA DB 12H,23H,34H
MAX DB 0
MIN DB 0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
ASSUME SS:SSEG
FMAX: MOV AX,DSEG
MOV DS,AX
MOV AX,SSEG
MOV SS,AX
MOV SP,SIZE STK
LEA SI,DATA
MOV AL,[SI]
MOV BL,[SI+1]
CMP AL,BL
JAE FMAX1
MOV AL,BL
FMAX1: MOV DL,[SI+2]
CMP AL,DL
JAE FMAX2
MOV AL,DL
FMAX2: MOV MAX,AL
FMIN: LEA SI,DATA
MOV AL,[SI]
MOV BL,[SI+1]
CMP AL,BL
JLE FMIN1
MOV AL,BL
FMIN1: MOV DL,[SI+2]
CMP AL,DL
JLE FMAX2
MOV AL,DL
FMIN2: MOV MIN,AL
MOV AH,4CH
INT 21H
CSEG ENDS
END
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodider 2009-05-14
  • 打赏
  • 举报
回复
看看2楼的例子。
nanlingcg 2009-05-14
  • 打赏
  • 举报
回复
看看。。。。。。。
BAYNPU 2009-05-14
  • 打赏
  • 举报
回复
这个源程序让楼主参考下:
.model small
.data
array dw -45h,54h,-86h,-70h,50h,-90h,23h,-61h,59h,78h
count equ ($-array)/2
mess db 'select the option(1:maximum 2:minimum):$'
err db 'error!$'
mess1 db 'the maximum is:$'
mess2 db 'the minimum is:$'
mess3 db 'the average value is:$'
newline db 13,10,'$'
average dw ?
crlf macro
lea dx,newline
mov ah,09h
int 21h
endm
messg macro addrs
lea dx,addrs
mov ah,09h
int 21h
endm
.code
mov ax,@data
mov ds,ax
lea bx,array
mov cx,count
inflag:messg mess
mov ah,1
int 21h
mov dl,al
cmp dl,'1'
je maxv
cmp dl,'2'
je minv
cmp dl,'3'
je avg
cmp dl,'q'
je exit
crlf
messg err
crlf
jmp inflag
maxv:call choose
push ax
messg mess1
pop ax
call btod
crlf
jmp inflag
minv:call choose
push ax
messg mess2
pop ax
call btod
crlf
jmp inflag
avg:messg mess3
lea bx,array
mov cx,count
call _average
mov ax,average
call btod
crlf
jmp inflag
exit:mov ax,4c00h
int 21h
choose proc near
push ax
push si
dec cx
mov si,2
mov ax,[bx]
loop1:cmp dl,'2'
jne flag1
cmp ax,[bx+si]
jle next
jmp flag2
flag1:cmp ax,[bx+si]
jge next
flag2:mov ax,[bx+si]
next: inc si
inc si
loop loop1
pop si
pop ax
ret
choose endp
_average proc near
push dx
push cx
lodsw
mov ax,0
next1:add ax,[bx]
inc bx
inc bx
loop next1
pop cx
mov dx,0
idiv cx
mov average,ax
pop dx
ret
_average endp
btod proc near
push si
push dx
push cx
push bx
push ax
cmp ax,0
jge next2
neg ax
push ax
mov dl,'.'
mov ah,02h
int 21h
pop ax
next2:mov dx,0
mov si,10
mov cx,0
next3:div si
add dl,30h
push dx
inc cx
mov dx,0
cmp ax,0
jnz next3
mov ah,2
disp:pop dx
int 21h
loop disp
mov dl,'.'
mov ah,02h
int 21h
pop ax
pop bx
pop cx
pop dx
pop si
ret
btod endp
end
fpcc 2009-05-14
  • 打赏
  • 举报
回复
可能是逻辑关系弄错了。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧