其中:X,Y,Z,W均旅纯为十六位有符号数。
程序如下:
DATA
SEGMENT
X
DW
10
16位变量
Y
DW
20
Z
DW
30
W
DW
40
U
DW
?,?
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
MOV
AX,Y
IMUL
Z
计算Y*Z,内容放在DX,AX中拆亮咐
MOV
CX,AX
MOV
BX,DX
SUB
CX,100
计算Y*Z-100
SBB
BX,
0
MOV
AX,X
CWD
将X符号扩展,形成DX:AX中的双字
ADD
AX,CX
计算X+(Y*Z-100),内键如容放在DX,AX中
ADC
DX,BX
IDIV
W
计算(X+(Y*Z-100))/W
MOV
U,AX
MOV
U+2,DX
MOV
AH,4CH
INT
21H
CODE
ENDS
END
START
............上来就是LCD人家看得懂么......ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV P0,#00H
MOV P1,#00H
MOV P2,#00H
MOV P3,#00H
ACALL DEL
MOV P0,#FFH
MOV P1,#FFH
MOV P2,#FFH
MOV P3,#FFH
ACALL DEL
AJMPMAIN
ORG 200H
DEL:MOV R5,#04H
DEL1:MOV R6,#0FFH
DEL2:MOV R7,#0FFH
DEL3:DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
ret
end
给新手的新手注释 :H表示地址 mov 是赋值的含义 R1,R2.....是寄存器,main相当于如碰C语言中主函数,是程 序的入口 0H~30H 一般用于存放中断函数无条件跳转语句(即为AJMP,SJMP,LJMP, 3者无条件跳转的地址量有限,LJMP最大(64Kbyte空间内语句可跳转),SJMP最小(-128H~+127H )) ,AJMP为2KByte无条件跳转
DEL 在该程序中表示延时函数,首先对寄存器R5,R6,R7赋值,R5*R6*R7*机器周期为延时时间 【 机器周期:12MHZ晶振=1us 6MHZ=2us】 执手神行完DEL中的MOV后 执行的是DJNZ命令,相当于C中i - -,不同的是若 i - -!=0,则跳转到 [DJNZ R...,()] 中()所代表的自定义函数{PS:DEL~DEL3均是是自定义函数,在延时函数里,为了达到延时值,一般都象我所写的那样 DEL: DJNZ R...,DEL 这样,i - -后又跳回来...,注意,在这里DEL,DEL1,...DEL3合起来叫做延时函数}
END表程序结束符(必须有)ACALL是表示调用子程序(这里,子函数是延时函数DEL)。。。。。与RET配套RET表返回调用子程序处
另外,该函数毕橡亏P0的点亮反映了共阴极合共阳极的不同,共阳极是MCU(即为单片机)接上若干发光二极管,并接电源VCC=+5V,如此一来,共阳极 熄灭整个一组端口FFH,点亮整个一组端口为00H 共阴极熄灭与点亮与共阳极恰起相反,因为共阴极MCU接上发光二极管后(从电路图看发光二极管上那一小竖道要面向GND而不是像共阳极那样面向MCU,当然在实际上也要注意接法的正负)接GND
ASSUME CS:CODE, DS:DATA---------------------------------
DATA SEGMENT数据段
STRING01 DB 13, 10, 'January $'
CHANG EQU $ - STRING01
STRING02 DB 13, 10, 'February $'
STRING03 DB 13, 10, 'March $'
STRING04 DB 13, 10, 'April $'
STRING05 DB 13, 10, 'May $'
STRING06 DB 13, 10, 'June $'
STRING07 DB 13, 10, 'July $'
STRING08 DB 13, 10, 'August$'
STRING09 DB 13, 10, 'September $'
STRING10 DB 13, 10, 'October $'
STRING11 DB 13, 10, 'November $'
STRING12 DB 13, 10, 'December $'
X DB ?
TEMP DB ?
DATA ENDS
---------------------------------
CODE SEGMENT 代码段
START:
MOV AX, DATA
MOV DS, AX
--------------------------------
IN_LOOP:
MOV X, 0 数卜培漏据清零.
MOV CX, 2 输入2位
_INX:
MOV AH, 1 输入单个字中逗符.
INT 21H
--------------------------------
CMP AL, 13
JEEXIT_IN
CMP AL, '型烂0'
JB_IN_ERR 小于'0',不是数字.
CMP AL, '9'
JA_IN_ERR
SUB AL, '0' 还原为数字
MOV TEMP, AL 暂存
MOV AL, x
MOV BL, 10老数据乘以10
MUL BL
ADD AL, TEMP 加上新数据.
MOV x, AL保存.
LOOP _INX 继续输入.
JMP EXIT_IN
--------------------------------
_IN_ERR:
MOV DL, 8
MOV AH, 2
INT 21H
POP CX
JMP _INX
--------------------------------
EXIT_IN:
--------------------------------
MOV AL, x
CMP AL, 0
JEEXIT
CMP AL, 12
JAEXIT
DEC AL
LEA DX, STRING01
MOV BL, CHANG
MUL BL
ADD DX, AX
MOV AH, 9
INT 21H
EXIT:
MOV AH, 4CH结束程序
INT 21H
CODE ENDS
END START
---------------------------------
不想输入就输入<回车>,结束程序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)