南邮汇编第一次实验

来源:互联网 发布:二阶矩阵特征值怎么求 编辑:程序博客网 时间:2024/04/27 17:01

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



DATAS SEGMENT    array DB -4,-3,-2,-1,0,1,2,3,4;数据段    LEA si,array    sum DB ?    min DB ?DATAS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    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 21HCODES ENDS    END START

说明:第一行是小于0的个数,第二行是最小值

0 0