用汇编语言写一个筛选10有符号的数的最大数和最小数
答案:5 悬赏:0
解决时间 2021-02-06 09:14
- 提问者网友:一人心
- 2021-02-05 15:19
写个那个算法就行
最佳答案
- 二级知识专家网友:啵啵桃汀
- 2021-02-05 16:49
;----------------------------------
;排序
;负数显示补码如-1显示65535
;如想增加数据只需在a变量中添加,
;同时长度len要相应的更改
;----------------------------------
data segment
len dw 10
a dw -1,2,100,-100,99,-120,15,46,411,102
b dw 0
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov cx,len
dec cx
loop1:
mov di,cx
mov bx,0
loop2:
mov ax,a[bx]
cmp a[bx+2],ax
jge cotinue
xchg ax,a[bx+2]
mov a[bx],ax
cotinue:
add bx,2
loop loop2
mov cx,di
loop loop1
mov si,0
loop3:
mov bx,a[si]
call bini
call crlf
add si,2
mov di,len
add di,len
cmp si,di
jl loop3
ret
main endp
bini proc near
mov cx,10000d
call bin
mov cx,1000d
call bin
mov cx,100d
call bin
mov cx,10d
call bin
mov cx,1d
call bin
ret
bini endp
bin proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
bin endp
crlf proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21
ret
crlf endp
code ends
end start
;排序
;负数显示补码如-1显示65535
;如想增加数据只需在a变量中添加,
;同时长度len要相应的更改
;----------------------------------
data segment
len dw 10
a dw -1,2,100,-100,99,-120,15,46,411,102
b dw 0
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov cx,len
dec cx
loop1:
mov di,cx
mov bx,0
loop2:
mov ax,a[bx]
cmp a[bx+2],ax
jge cotinue
xchg ax,a[bx+2]
mov a[bx],ax
cotinue:
add bx,2
loop loop2
mov cx,di
loop loop1
mov si,0
loop3:
mov bx,a[si]
call bini
call crlf
add si,2
mov di,len
add di,len
cmp si,di
jl loop3
ret
main endp
bini proc near
mov cx,10000d
call bin
mov cx,1000d
call bin
mov cx,100d
call bin
mov cx,10d
call bin
mov cx,1d
call bin
ret
bini endp
bin proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
bin endp
crlf proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21
ret
crlf endp
code ends
end start
全部回答
- 1楼网友:疯山鬼
- 2021-02-05 19:55
嗯~
存放10个数
让max=min=第一个数
然后遍历十个数
有比max大的 就将其值赋给max
有比min小的 就将其值赋给min
完成算法
- 2楼网友:孤伤未赏
- 2021-02-05 19:49
DATA SEGMENT
TAB DB 1,4,10,-1,-5,0,8,59,17,4
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
LEA SI,TAB
MOV BH,[SI] ;BH装max
MOV BL,[SI] ;BL装min
MOV CX,0009H
L1: INC SI
CMP [SI],BH
JL L2
MOV BH,[SI]
L2: CMP [SI],BL
JG L3
MOV BL,[SI]
L3: Loop L1
MOV DX,0000H
MOV DL,BH
CALL 输出显示函数(汇编里这个还比较麻烦)
MOV DL,BL
CALL 输出显示函数
MOV AH,4CH
INT 21H
CODE ENDS
END START
- 3楼网友:滚刀废物浮浪人
- 2021-02-05 19:27
1、读取第一个元素,作为最大数和最小数的初值;
2、用当前最大数和最小数与后续各个元素比较,要分清无符号数和带符号数比较的条件转移指令不同;
3、无符号数条件转移用JA、JB等指令,带符号数条件转移用JG、JL等指令;
4、根据比较结果,适时更新最大数和最小数。
- 4楼网友:何必打扰
- 2021-02-05 18:00
title max & min
data segment
x1 db ?,'$'
x2 db ?,'$'
x3 db ?,'$'
x4 db ?,'$'
x5 db ?,'$'
x6 db ?,'$'
x7 db ?,'$'
x8 db ?,'$'
x9 db ?,'$'
x10 db ?,'$'
result db 4 dup('$')
data ends
stack segment para stack 'stack'
db 100 dup(?)
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
begin: mov ax,data
mov ds,ax
mov es,ax
call readnum ;读入十个数,b并转成二进制数
;输入数据以‘,’隔开且最后以','结束
lea di,result
call max ;求最大值
call min ;求最小值
lea dx,result
mov ah,9
int 21h
mov ah,1
int 21h
mov ah,4ch
int 21h
readnum proc
push ax
push cx
push bx
push dx
lea bx,x1
call input
lea bx,x2
call input
lea bx,x3
call input
lea bx,x4
call input
lea bx,x5
call input
lea bx,x6
call input
lea bx,x7
call input
lea bx,x8
call input
lea bx,x9
call input
lea bx,x10
call input
pop dx
pop bx
pop cx
pop ax
ret
readnum endp
input proc
mov ah,1
int 21h
and al,0fh
mov dl,al
mov ah,1
int 21h
cmp al,'/'
jnc plo1
mov [bx],dl
jmp htt
plo1: and al,0fh
mov [bx],al
mov al,dl
mov cl,10
mul cl
add al,[bx]
mov [bx],al
mov ah,1
int 21h
htt: ret
input endp
max proc
push ax
push cx
push bx
push dx
lea bx,x1
mov al,[bx]
lea bx,x2
call maxnum
lea bx,x3
call maxnum
lea bx,x4
call maxnum
lea bx,x5
call maxnum
lea bx,x6
call maxnum
lea bx,x7
call maxnum
lea bx,x8
call maxnum
lea bx,x9
call maxnum
lea bx,x10
call maxnum
cmp al,10
jnc plo3
add al,30h
mov [di],al
inc di
jmp htl
plo3: call btobcd
htl: pop dx
pop bx
pop cx
pop ax
ret
max endp
maxnum proc
cmp al,[bx]
jc plo2
jmp hll
plo2: mov al,[bx]
hll: ret
maxnum endp
btobcd proc
push dx
mov dl,0
again: sub al,0ah
js next
inc dl
jmp again
next: add al,0ah
add dl,30h
mov [di],dl
inc di
add al,30h
mov [di],al
inc di
pop dx
ret
btobcd endp
min proc
push ax
push cx
push bx
push dx
lea bx,x1
mov al,[bx]
lea bx,x2
call minnum
lea bx,x3
call minnum
lea bx,x4
call minnum
lea bx,x5
call minnum
lea bx,x6
call minnum
lea bx,x7
call minnum
lea bx,x8
call minnum
lea bx,x9
call minnum
lea bx,x10
call minnum
cmp al,10
jnc plo5
add al,30h
mov [di],al
inc di
jmp hhl
plo5: call btobcd
hhl: pop dx
pop bx
pop cx
pop ax
ret
min endp
minnum proc
cmp al,[bx]
jnc plo4
jmp hht
plo4: mov al,[bx]
hht: ret
minnum endp
code ends
end begin
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯