例1
DATA SEGMENTBLOCK DW 0ABCDH ;字型变量BLOCK,赋值0ABCDHBUFF DD ? ;从BUFF偏移地址开始,为一个双字型数据保留了4个字节的内存单元
DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;AX寄存器储存DATA首地址MOV DS,AX ;段寄存器DS储存DATA首地址MOV DX,BLOCK ;DX储存变量BLOCK DX是ABCDHMOV AX,DX ;AX储存ABCDHAND AX,0F0FH ;与运算,AX储存0B0DHAND DX,0F0F0H ;DX储存A0C0HMOV CL,4 ;CX计数器的地位储存4SHR DX,CL ;DX逻辑右移4位 空位补0 DX储存0A0CHLEA BX,BUFF ;加载变量BUFF的首地址 到BX-双字型4字节MOV [BX+0],AL ;AX低8位-1字节 0DHMOV [BX+1],DL ;DX低8位-1字节 OCHMOV [BX+2],AH ;AX高8位 0BHMOV [BX+3],DH ;DX高8位 0AHMOV AX,4C00H ;中断进入系统调动 DOS功能INT 21H
CODE ENDSEND START
例2 判断MEMS单元数据,将结果存入MEMD单元。若数据>0,结果为1;若数据<0,结果为-1;若数据=0,结果为0.
DATA SEGMENTMEMS DB 08H ;字节型变量MEMSMEMD DB ? ;字节型变量MEMD
DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AXMOV AL,MEMS ;取数据判断 AL=0BH--1个字节CMP AL,0 ;AL和0比较JGE NEXT ;大于等于0,跳到NEXTMOV AL,-1 ;上边不符合,小于0时,-1存入ALJMP DONE ;跳到DONENEXT: JE DONE ;等于0,跳转到DONEMOV AL,1 ;1存入ALDONE: MOV MEMD,AL ;AL存入MEMDMOV AX,4C00H ;DOS功能号INT 21H
CODE ENDSEND START
例3 统计BUFF缓冲区数据中负数的个数.
DATA SEGMENTBUFF DB 67H,9EH,-6AH,0ABH,6DH ;MEM DB ?
DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,5 ;控制循环次数--数字的总个数LEA BX,BUFF ;设置缓冲区指针MOV DL,0 ;统计计数器清零--统计负数的个数NEXT: MOV AL,[BX] ;取出第一个数据放在AL--67HCMP AL,0 ;作比较JNS AA1 ;不是负数,转移到AA1INC DL ;负数,统计值+1AA1: INC BX ;因为字节+1 移动指针LOOP NEXT ;循环MOV MEM,DL ;负数个数存在MEM MOV AX,4C00HINT 21H
CODE ENDS
END START
例4 统计AX寄存器中‘1’的个数
CODE SEGMENTASSUME CS:CODESTART:MOV CX,16 ;循环次数16 --AX寄存器存16位XOR DL,DL ;清零CMP AX,0 ;AX是0吗JZ DONE ;是0,16位没有数字1,结束循环BB1: SHL AX,1 ;不是0,逻辑左移1位,移出的位置放在CFADC DL,0 ;统计‘1’个数 ADC=ADD+CFLOOP BB1DONE: MOV AX,4C00HINT 21H
CODE ENDSEND START
例5 在BLOCK内存区中有一串字符,统计‘%’之前的字符个数
DATA SEGMENTBLOCK DB 'ANDEP01395WR'COUNT ENQ $-BLOCK ;当前位置对应偏移地址 统计字符串8位数据长度MEM DB 0
DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BLOCK ;相当于LEA SI,BLOCKMOV CX,COUNT ;次数放在COUNT中LOOP1:MOV AL,[SI] ;取字符CMP AL,'%' JZ DONE ;是‘%’ 结束循环INC BYTE PTR MEM ;不是‘%’ 统计值+1INC SI ;指针+1LOOP LOOP1DONE: MOV AX,4C00HINT 21H
CODE ENDSEND START
例6 用子程序结构实现寄存器AX内容乘10,结果仍在AX中.
CCC EQU 1000
CODE SEGMENTASSUME CS:CODESTART:MOV AX,CCC ;AX赋值为1000 十六进制03E8HCALL MUL10 ;调用子程序;子程序
MUL10 PROC ;乘10子程序 入口参数AX,出口参数AXPUSHF ;保护现场 保护标志寄存器和BXPUSH BX;10*AX->AXADD AX,AX ;2XX->AXMOV BX,AX ;2XX->BXADD AX,AX ;4XX->AXADD AX,AX ;8XX->AXADD AX,BX ;8XX+2XX->AXPOP BX ;恢复现场POPFRET ;返回主程序
MUL10 ENDPCODE ENDSEND START