;将一个BCD码转化成对应的ASCII码 DATA SEGMENT BCD_BUF DB 96H ASC_BUF DB 2DUP(?) DATA ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BCD_BUF MOV BL,AL MOV CL,4 SHR AL,CL ADD AL,30 MOV ASC_BUF,AL AND BL,0FH ADD BL,30 MOV ASC_BUF+1,BL CODES ENDS END START XLAT 换码指令 XLAT OPR 或者 XLAT (AL)<-((BX)+(AL)) 事先建立一个字节表格,表格的首地址存放在BX中,位移量存放在AL中,用XLAT则可以在AL中得到 表格中相应的转换码 举例: 1. 利用直接查表法编程完成将内存单元TAB首地址开始存放的0-15的平方数表,求出A单元给定数(<15) 的平方值送给B单元保存。 DATA SEGMENT TAB DB 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225 A DB 12 B DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS,DATA START: MOV AX,DATA MOV DS,AX MOV BX,OFFSET DATA MOV AL,A XLAT MOV B,AL MOV AH,4C INT 21H CODE ENDS END START 2. 把数字0-F转化成相应的七段数码管所需要的相应的代码(亮的用0表示) DATA SEGMENT TAB DB 1000000,1111001,0100100,0110000, 0011001,0010010,0000010,1111000, 0000000,0010000,0001000,0000011, 1000110,1000000,0000110,0001110 A DB 8 B DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS,CODE START: MOV AX,DATA MOV DS,AX LEA BX,TAB MOV AL,A XLAT MOV B,AL MOV AH,4C INT 21H CODE ENDS END START 比较两个无符号数的大小,把大数存入MAX单元 DATA SEGMENT XX DB X YY DB Y DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS,DATA START: MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,YY JNB FORMER MOV AL,YY FORMER: MOV MAX,AL MOV AH,4CH INT 21H CODE ENDS END START 函数符号X>0,Y=1;X=0,Y=0;X<0,Y=-1.(-128<=X<=127) DATA SEGMENT XX DB X YY DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS,DATA START: MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 JGE ONE MOV AX,0FFH MOV YY,AX HLT ONE: JE TWO MOV AX,01H MOV YY,AX HLT TWO: MOV AX,0 MOV YY,AX HLT CODE ENDS END START 三个单字节无符号数存放在BUFFER开始的缓冲区中,写一个能钭三个数从大到小排列的程序 DATA SEGMENT BUFFER DB 87,123,234 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,BUFFER MOV AL,[SI] MOV BL,[SI+1] MOV CL,[SI+2] CMP AL,BL JAE ONE XCHG AL,BL ONE: CMP AL,CL JAE TWO XCHG AL,CL TWO: CMP BL,CL JAE THREE XCHG BL,CL THREE: MOV [SI],AL MOV [SI+1],BL MOV [SI+2],CL MOV AH,4C INT 21H CODE ENDS END START