南邮汇编第一次实验

题目描述:从数据段单元开始有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的个数,第二行是最小值

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值