您的位置:首页 > 其它

南邮汇编第一次实验

2016-10-17 12:39 726 查看
题目描述:从数据段单元开始有9个有符号数,找出最小值存放到数据段min单元,并将负数的个数显示在屏幕上.

DATAS SEGMENT
array DB -4,-3,-2,-1,0,1,2,3,4;数据段
LEA si,array
sum DB ?
min DB ?
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov sum,0
mov CX,9
again:
mov al,[si]
cmp al,0 ;因为是db所以是字节类型,所以放在al中表示字节类型(一个字节)此部分也可以写成cmp BYTE PTR[si],0
JGE next
inc sum;当小于0则累加记录小于0的个数sum
next:inc si;不管怎样都要访问下一个单元的值(同样因为这里是DB所以是字节,所以只用往后+1)
loop again
mov AH,2;得到小于的个数但是需要转成字符+30H
mov DL,sum
add DL,30H
INT 21H
mov AH,2;这三行是换行,接下去是打印最小值
mov DL,0AH
int 21H
lea si,array;si重新指向数据段首部
mov cx,9
mov al,[si]
mov min,al;min初始化为数据段第一个值但是注意源,目标操作数不能同时为内存操作数,所以需要通过寄存器转换)
inc al;从第二个开始找比min小的数
again2:
mov al,[si]
cmp min,al;同样比较数据段中每一个值和min的大小
JL next2
mov al,[si]
mov min,al
next2:
inc si
loop again2
cmp min,0;接下去是打印min,当min为非负数直接打印,否则应当先输出负号,再输出它的相反数
JGE next3
mov AH, 02H;打印负号
mov DL, 2DH
int 21H
mov BL,0;用0减去这个数得到相反数
sub bl,min
mov min,bl
next3:
mov AH,2
mov DL,min
add DL,30H;转成字符类型
int 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START

说明:第一行是小于0的个数,第二行是最小值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: