高手帮忙写一个简单的汇编语言程序【在线等】

设变量K中存放了20个有符号整数组成的字节型数组,编写程序,找出其中最大的数和最小的数,并显示输出
谢谢了 写好后我一定给您加分
这有一个差不多的 您也可以帮忙改改这个 只要实现那个功能就可以了
DATA SEGMENT
NUMA DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H
NUMB DB ?,?
DATA ENDS ;数据段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
LEA SI, NUMA ;源地址
LEA DI, NUMB ;目标地址
MOV CX, 7
MOV BH, [SI] ;最大最小都初始化为第一个数
MOV BL, BH
INC SI
A1: LODSB
CMP AL, BH ;比较第二和第二个以后的数
JBE A2 ;小于等于的话跳到A2
MOV BH, AL ;大于的话更新最大值
JMP A3
A2: CMP AL, BL ;和目前最小值比较
JAE A3 ;高的话跳到A3
MOV BL, AL ;更新最小值
A3: LOOP A1 ;循环
MOV [DI], BX ; 把最大最小放到目标数据区
MOV AX, 4C00H
INT 21H
CODE ENDS
END START

DATA SEGMENT
K DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H,1H,2H,0CH,3H,0BH,4H,5H,6H,7H,9H,8H,0AH
DATA ENDS ;数据段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
LEA SI, K ;源地址
MOV CX,20
MOV BH, [SI] ;最大最小都初始化为第一个数
MOV BL, BH
INC SI
A1: LODSB
CMP AL, BH ;比较第二和第二个以后的数
JLE A2 ;小于等于的话跳到A2
MOV BH, AL ;大于的话更新最大值
JMP A3
A2: CMP AL, BL ;和目前最小值比较
JGE A3 ;高的话跳到A3
MOV BL, AL ;更新最小值
A3: LOOP A1 ;循环
CALL DISP
MOV BL,BH
CALL DISP
MOV AX, 4C00H
INT 21H
DISP PROC NEAR
mov ch,2
rotate:
mov cl,4
rol bl,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
RET
DISP ENDP
CODE ENDS
END START
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-17
; 本程序通过编译,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr
; 用法举例:Output PromptStr

Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出回车换行
enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
enter_CTLF endp
; -----------------------------------------
; 功能:把AX中的二进制有、无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; Signed=是否有符号数。'y'=有符号数,'n'=无符号数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
.IF Signed == 'y'
mov @@Carry_Yes,'+'
test ax,8000h
jz $+9
mov @@Carry_Yes,'-'
neg ax
.Endif
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
.IF Signed == 'y'
cmp @@Carry_Yes,'-'
jnz $+6
mov byte ptr [di],'-'
dec di
.Endif
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
@@Carry_Yes db '+'
Dec_ASCII EndP
; -----------------------------------------
Signed db 'y' ;是否有符号数。'y'=有符号数,'n'=无符号数
K db 12,26,87,253,198,113,99,75,61,51,-31,69,15,-63,-89,58,79,87,41,123
Count equ $-K ;数组元素个数
prompt_Max db 'the Maximum: $'
prompt_Min db 'the Minimum: $'

Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段

; 找出其中的最大值及最小值
cld
lea si,K ;数组变量地址
lodsb ;将第一个元素读入AL
mov ah,al ;AH=最大值,AL=最小值
mov cx,Count-1
Compare: cmp al,[si] ;当前最小值与当前元素比较
jle $+4 ;若小于或等于,不更新最小值,转去与最大值比较
mov al,[si] ;当前最小值大于当前元素,装入新的最小值
cmp ah,[si] ;当前最大值与当前元素比较
jge $+4 ;若大于或等于,不更新最大值
mov ah,[si] ;当前最大值小于当前元素,装入新的最大值
inc si ;增1,准备处理下一个字母
loop Compare
xchg ah,al
push ax
Output prompt_Max ;提示显示最大数
pop ax
push ax
cbw
call Dec_ASCII ;显示最大数
call enter_CTLF ;输出一个回车、换行
Output prompt_Min ;提示显示最小数
pop ax
xchg ah,al
cbw
call Dec_ASCII ;显示最小数
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
第2个回答  2009-05-17
DATA SEGMENT
NUMA DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H
NUMB DB ?,?
Max db 'Min: '
X db '00H',0dh,0ah
Min db 'Max: '
Y db '00H$'
DATA ENDS ;数据段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
LEA SI, NUMA ;源地址
LEA DI, NUMB ;目标地址
MOV CX, 7
MOV BH, [SI] ;最大最小都初始化为第一个数
MOV BL, BH
INC SI
A1: LODSB
CMP AL, BH ;比较第二和第二个以后的数
JBE A2 ;小于等于的话跳到A2
MOV BH, AL ;大于的话更新最大值
JMP A3
A2: CMP AL, BL ;和目前最小值比较
JAE A3 ;高的话跳到A3
MOV BL, AL ;更新最小值
A3: LOOP A1 ;循环
MOV [DI], BX ; 把最大最小放到目标数据区
lea di,X
mov al,NUMB
call BintoHex;转换
lea di,Y
mov al,NUMB+1
call BintoHex
lea dx,Max;显示输出
mov ah,9
int 21h
mov ah,0
int 16h
MOV AX, 4C00H
INT 21H

BintoHex:
mov ah,al
mov cl,4
shr al,cl
and al,0fh
or al,'0'
cmp al,'9'
jbe Q1
add al,7
Q1:mov [di],al
inc di
mov al,ah
and al,0fh
or al,'0'
cmp al,'9'
jbe Q2
add al,7
Q2:mov [di],al
ret

CODE ENDS
END START

高手帮忙写一个简单的汇编语言程序【在线等】
DATA ENDS ;数据段 CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX LEA SI, K ;源地址 MOV CX,20 MOV BH, [SI] ;最大最小都初始化为第一个数 MOV BL, BH INC SI A1: LODSB CMP AL, BH ;比较第二和第二个以后的数 JLE A2 ;小于等于的话跳到A2 MOV ...

请高手帮忙啊,这个用汇编语言怎么写啊,本人刚学还不太懂
DATA SEGMENT STRING1 DB 'abcdefg'STRING2 DB 'abcdefg'MSG1 DB 'No match.$'MSG2 DB 'match.$'LEN EQU STRING2 - STRING1 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX ;初始化DS ;--- MOV BX, 0 ;...

各位高手帮我解决一个汇编程序吧
(1)org是指定地址计数器的当前值,也就是说用org指定一个地址后,下面再分配的内存单元就是从指定位置开始。题目中指定了org 30H,那么下一个要分配的单元就是30H。而EQU是符号定义伪指令,它定义的符号就相当于C语言里的符号常量,并不占用存储空间。所以,S1的偏移地址就是30H。S1占用了8个单元...

汇编语言高手帮忙编一个大作业呀!江湖救急!
双击可执行程序RQSZ.exe,在出现的提示信息中输入大写字母“D”,可 显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序。STACK SEGMENT STACK DW 200 DUP (?)STACK ENDS DATA SEGMENT SPACE DB 1000 DUP (' ')PATTERN DB 6 DUP (' '),0C9H,26 DUP (0...

汇编递归X的n次方,高手帮忙
;第一个PUSH=底数 ;第二个PUSH=指数 ;输出:;AX=结果 ;--- power proc push bp mov bp,sp add bp,4 mov ax,[bp]cmp ax,1 jz Return dec ax push [bp+2]push ax call power mul word ptr [bp+2]pop bp ret 4 Return:mov ax,[bp+2]pop bp ret 4 power endp ;--- start...

汇编高手来帮帮忙 谢谢了在线等答案,
五、程序设计题(2道小题,共20分)1、以下5个小题,请分别用一条MASM语句完成其要求。(1)将45H,0F000H,89H存放在变量XYZ的存储单元中。XYZ DB 45H,0F000H,89H (2)预留100个字节单元的存储空间,用变量名BUFFER表示 BUFFER DB 100 DUP(?)(3)将字符串“How are you !

懂汇编语言的高手帮忙!
(1)data segment mun dw ?data ends code segment assume:cs:code,ds:data start:mov ax,data mov ds,ax mov ax,0h mov bx,64h rep: add ax,bx dec bx jnz rep mov [mun],ax mov bx,ax and bx,0f000h mov cx,04h call display mov bx,ax and bx,0f00h ...

求懂汇编语言高手帮忙,急急急,会追加给分,谢谢
lea di,str2 cld mov cx,12 repz cmps mov ax,4c00h int 21h code ends end start 2. cmp a,10 jge next mov ax,b mov c,ax jmp naxt1 next:mov ax,a mov c,ax next1:3.lea bx,a mov cx,len next:mov ax,[bx]cmp ax,7 jge next1 add sum ax next:add bx,2 loop ...

汇编程序问题
我新学汇编,写了一段程序,代码如下,可是怎么都编译通不过,我用的是ma *** 5.0,我不知道里面的结构之类的定义是否有错,请高手帮忙看一下,谢谢 statistics struct nam db 20,0,20 dup(?)class db 6,0,6 dup(?)number db 7,0,7 dup(?)peace db 5,0,5 dup(?)exper db 5,0,5 ...

汇编语言 高手帮忙 内存地址20000 则 8086 中 段地址的最小值
1 首先内存地址20000H 则可以推测该段地址的最高地址的最小值为2000FH 段寄存器的最后一位=0(以十六进制表示)而该段最高地址=段寄存器*10H +FFFFH=XXXXFH 2 可以解出该段地址的最小值=该段地址的最高地址-FFFFH=2000FH-FFFFH=10001H 本题的关键是先要推出该段地址的最高地址的最小...

相似回答