DATA SEGMENT X DB 25 Y DB 32 Z DW ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA EXPRE PROC FAR START: PUSH DS
SUB AX,AX PUSH AX
MOV AX, DATA MOV DS,AX MOV AL,X
MUL AL MOV BL,Y ADD BL,BL
ADD BL,Y MOV BH,0 SUB AX,BX SHR AX,1 MOV Z, AX RET
EXPRE ENDP CODE ENDS END START
查表程序1:已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT
TAB DB 80,85,86,71,79,96
DB 83,56,32,66,78,84
DB 10
NO
ENGLIST DB ? DATA ENDS CODE SEGMENT
ASSUME DS:DATA, SS:STACK, CS:CODE BEGIN:MOV AX,DATA
MOV DS ,AX
LEA BX,TAB
MOV AL,NO XLAT TAB
MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN
查表程序2:利用查表法求Y=X3 。设X放在数据区XVAL单元,结果存入YVAL单元。立方表放在从TABLE开始的单元。
DATA SEGMENT
TABLE DB 0,1,8,27,64,125,216 XVAL DB 6 YVAL DB ? DATA ENDS
STACK SEGMENT STACK DB 50 DUP(?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START PROC FAR PUSH DS MOV AX, 0 PUSH AX
MOV AX,DATA MOV DS,AX
MOV BX,OFFSET TABLE MOV AH,0 MOV AL,XVAL ADD BX,AX MOV AL,[BX] MOV YVAL,AL RET START ENDP CODE ENDS END START
将内存X单元的内容拆成两段,每段4位,并将它们分别存入内存Y和Z单元。即X单元中的低4位放入Y的低4位,X单元中的高4位放入Z的低4位,而Y和Z的高4位均为零。
DATA SEGMENT X DB 7AH Y DB ? Z DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START PROC FAR ST: PUSH DS
MOV AX, 0 PUSH AX
MOV AX,DATA MOV DS,AX MOV AL,X AND AL,0FH MOV Y,AL MOV AL,X MOV CL,4 SHR AL,CL MOV Y,AL RET START ENDP CODE ENDS END ST
分支程序
已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
DATA SEGMENT
X DB -25
RESULT DB ? DATA ENDS CODE SEGMENT
ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV AL,X TEST AL,80H JZ NEXT NEG AL NEXT: MOV
RESULT,AL
MOV AH,4CH INT 21H CODE ENDS END START
例:设内存中有两个互不相等的无符号字数据,分别是放在X单元和Y单元,若X>Y ,则将X-Y的结果送入RESULT单元,否则,将X+Y的结果送入RESULT单元。 SSEG SEGMENT STACK STK DB 20 DUP (0) SSEG ENDS
DATA SEGMENT X DW 32 Y DW 48 RESULT DW ? DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE, SS:SSEG START: MOV AX,DATA MOV DS,AX MOV AX,X
CMP AX,Y JBE PLUS SUB AX,Y
JMP NEXT PLUS: ADD AX,Y
NEXT:MOV RESULT,AX MOV AH,4CH
INT 21H DOS CODE ENDS
END START
例:判断输入的ASCII码字符是字母还是数字。 SSEG SEGMENT STACK DW 100 DUP(?) SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,SS:SSEG ST: MOV AH,1 INT 21H
TEST AL,40H JZ NUM
MOV DL,‘C‘ SH: MOV AH,2 INT 21H
MOV AH,4CH INT 21H
NUM:MOV DL,‘D‘ JMP SH CSEG ENDS END ST
例:根据输入的ASCII码字符是字母还是数字。 CMP AL, 'a' JE LAA CMP AL,'b' JE LAB CMP AL,'c' JE LAC CMP AL,'d' JE LAD JMP ERROR LAA: MOV DL,’1’ JMP DONE LAB: MOV DL,’2’ JMP DONE LAC: MOV DL,’3’ JMP DONE LAD: MOV DL,’4’ JMP DONE ERROR: MOV DL,’E’ JMP DONE DONE: MOV AH,02H INT 21H
(AL)=? =’a’ =’b’ =’c’ =’d’ =其它字符
输出输出输出输出输出结束
例:编写一个能完成下列数学表达式功能的程序:
(X1)1 X(1X1)0
1(X1)
DATA SEGMENT X DB -3 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA MAIN PROC FAR STRAT:PUSH DS
XOR AX,AX PUSH AX
MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,-1
JG BIGER
MOV AL,0FFH JMP DONE BIGER:CMP AL,1 JL ZERO MOV AL,1 JMP DONE ZERO: MOV AL,0 DONE: MOV X,AL RET MAIN ENDP CODE ENDS
END START
例:试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。设三个带符号数分别在三个字变量X、Y、Z中存储。 STAC SEGMENT STACK DB 200 DUP(0) STACK ENDS
DATA SEGMENT X DW 00ABH Y DW –5 Z DW 200
MAX DW ? DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,Y ;X>Y? JG L1 MOV AX,Y ;Y>Z? CMP AX,Z JG EXIT L2:MOV AX,Z JMP EXIT L1: CMP AX,Z ;X>Z? JLE L2
EXIT: MOV MAX,AX MOV AH,4CH INT 21H CODE ENDS END START
循环程序
例: 编程求 100 ,并将S存入SUM单元。
Si i1
DATA SEGMENT SUM DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,0 MOV CX,100 AGAIN: ADD AX,CX DEC CX JNZ AGAIN MOV SUM,AX
MOV AH,4CH INT 21H CODE ENDS
END START
单循环
1. 用计数器控制循环 在循环程序中,控制循环的方法因为要求不同而有若干种。最常用的是用计数器控制循环。
例4-2在一串给定个数的数中寻找最大值(或最小值),并且放至指定的存储单元。每个数用16位表示。 NAME SEARCH_MAX DATA SEGMENT BUFFER DW X1,X2,…,Xn COUNT EQU $ - BUFFER MAX DW ? DATA ENDS STACK SEGMENT PAPA STACK′STACK′ DB 64 DUP(?) TOP EQU $ - STACK STACK ENDS CODE SEGMENT START PROC FAR ASSUMECS: CODE,DS: DATA,SS:BEGIN: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,COUNT LEA BX,BUFFER MOV AX,[BX] INC BX DEC CX AGAIN: CMP AX,[BX] JGE NEXT MOV AX,[BX] NEXT: INC BX LOOP AGAIN START ENDP CODE ENDS END BEGIN
STACK
多重循环
程序常常在一个循环中包含另一个循环,这就是多重循环,例如多维数组的运算就要用到多重循环。
下面是一个多重循环的例子(没有精确计算延时时间): Delay: MOV DX,3FFH TIME: MOV AX,0FFFFH TIME1: DEC AX NOP JNE TIME1 DEC DX JNE TIME RET
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务