汇编入门学习笔记 分支程序举例

题目 设有三个单字节无符号数存放在BUFFFER开始的缓冲区中,写一个能将它按大到小重新排列的程序

代码如下:

DATAS SEGMENT
    ;此处输入数据段代码
    BUFFER DB 87,234,123  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    MOV SI,OFFSET BUFFER  ;将BUFFER的偏移地址传给SI(源地址寄存器)
    MOV AL,[SI]   ;分别将三个数放到三个寄存器中
    MOV BL,[SI+1]
    MOV Cl,[SI+2]
    
    CMP AL,BL ;排序
   ;CMP 作用于两个无符号数 a,b时
   ;作减法,若a-b>0 符号位cf=0,零位 zf=0
   ;若a-b=0 cf=0 zf=1
   ;若a-b<0 cf=1 zf=0
    JAE NEXT1 
    ;JAE 若cf=0,转移到后面对应的过程NEXT1去
    ;否则按顺序往下执行
    XCHG AL,BL  
    ;通过XCHG交换寄存器中的数据,达到排序的效果
 NEXT1:CMP AL,CL
       JAE NEXT2
       XCHG AL,CL
 NEXT2:CMP BL,CL
       JAE NEXT3
       XCHG BL,CL
 NEXT3:MOV [SI],AL  ;按从大到小的顺序依次存回缓冲区 
       MOV [SI+1],BL
       MOV [SI+2],CL
       
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

 

posted @ 2018-01-09 23:46  hinata_hajime  阅读(266)  评论(0编辑  收藏  举报