记忆体不足什么意思 用汇编语言写一个判断记忆体中的值是大于0还是小于0的程式
用汇编语言写一个判断记忆体中的值是大于0还是小于0的程式
用汇编语言写一个判断记忆体中的值是大于0还是小于0的程式
mov ax,(记忆体单元的值)
mov bx,(需要比较的值)
cmp ax,bx
执行后,看相关标志位的值
如果:
1.ax=bx 则zf=0
2.ax<bx 则cf=1
3.ax>bx则cf=0,并且zf=0
如果不看标志位,也可以用跳转指令来判断
如:
cmp ax,bx
je s ;等于则跳转 jb 低于跳转 ja 高于跳转
...;【其他程式码可有可无】
s:(你想做的程式程式码)
这种问题以后不要再问了自己看下书基本就会了,加油!
c语言怎么判断大于0还是小于0
#include <stdio.h>int main(){ int n; printf("输入一个整数: "); scanf("%d",&n); if(n>0) printf("%d 是个大于0的整数.n",n); else if(n==0) printf("%d 是个等于0的整数.n",n); else printf("%d 是个小于0的整数.n",n); return 0;}
用汇编语言编一个闹钟的程式
我有一个,使我们老师编的,可供参考:
ORG 0000H ;上电入口
AJMP MAIN
ORG 000BH ;定时器T0中断入口地址
AJMP TIM0
ORG 001BH ;定时器T1中断入口地址
AJMP TIM1
MAIN:
MOV SP,#5AH ;设定堆叠指标栈底地址
MOV P1,#0FFH ;P1口初始化
MOV SCON,#00H ;序列控制字0方式通讯
MOV TMOD,#00H ;设定定时器T0、T1均为方式0
MOV TH1,#3CH ;赋予时间常数
MOV TL1, #0B0H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV 20H, #0FFH ;设定标志位
MOV 21H, #00H
MOV 10H, #0BH ;赋初值
MOV 11H, #0BH
MOV 12H, #0BH
MOV 13H, #0AH
MOV 14H, #13H ;动态储存单元
MOV 22H, #00H ;视讯记忆体地址初始化
MOV 23H, #00H
MOV 24H, #00H
MOV 25H, #00H
MOV 26H, #00H ;回圈变数赋初值
MOV 35H, #1FH
MOV 50H, #02H
SETB ET0 ;开T0中断
SETB ET1 ;开T1中断
SETB EA ;开总中断
WW0: ACALL DISP0
AA: JB P1.0, AA
ACALL DELAY
MOV 21H,#00H
JB P1.0, WORK1
AJMP AA00
WORK1: AJMP WORK
AA00:
MOV 10H,23H ;显缓赋值
MOV 11H, 24H
MOV 12H, 25H
MOV 13H, 26H
SETB TR0 ;启动定时器T0
SETB TR1 ;启动定时器T1
SETB EA
MOV 21H,#00H
AA3:
JNB 08H, AA1
AJMP ADDA ;转增数程式
AA1:
JNB 09H, AA2
AJMP MOVE ;转移位程式
AA2:
JNB 0AH, AA3
AJMP EXIT ;转退出程式
TIM1:
MOV TH1, #03CH
MOV TL1, #0B0H
DJNZ 35H, MM2
MOV 35H, #1FH
JNB 0EH,MM0
DJNZ 50H,MM2
MOV 50H,#02H
SETB 0DH
AJMP MM2
MM0:
JNB 0BH, MM
AJMP MM1
MM:
MOV R0, #14H
MOV A, @R0
MOV R0, A
MOV A, #0BH
MOV @R0, A
SETB 0BH
MM1: CLR 0BH
MM3:
ACALL DISP
MOV 10H, 23H
MOV 11H, 24H
MOV 12H, 25H
MOV 13H, 26H
MM2: RETI
DISP:
MOV DPTR , #PAWT ;送断码首址
MOV R1, #10H ;赋显缓首址
MOV R4, #04H ;回圈计数次数
LOOP:
MOV A, @R1
MOVC A, @A+DPTR
MOV R5, A
MOV A, R1
CJNE A, #12H, GG
MOV A, R5
ANL A, #0FEH
MOV R5, A
GG:
MOV A, R5
MOV SBUF, A ;输出断码
LL:
JNB TI, LL ;回圈判位
CLR TI
INC R1
DJNZ R4,LOOP
rET ;子程式返回
PAWT: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,31H,0FFH ;断码表1
DISP0: MOV DPTR , #PAWT0
MOV R1, #10H
MOV R4, #04H
LOOP0: MOV A, @R1
MOVC A, @A+DPTR
MOV SBUF, A
LL0: JNB TI, LL0
CLR TI
INC R1
DJNZ R4, LOOP0
RET
PAWT0: DB 03H,9FH, 5H,0DH,99H,49H,41H,1FH,01H,09H,31H,0FFH ;断码表2
ADDA: CLR 08H ;加数子程式
MOV R0, #14H
MOV A, @R0
MOV R0, A
MOV A, @R0
INC A
CJNE A, #0AH, BB
MOV A, #00H
BB: MOV @R0, A
MOV A,10H
CJNE A,#0AH , L1
L1: JC L2
CLR A
L2: MOV 23H,A
MOV A,11H
CJNE A,#06H , L3
L3: JC L4
CLR A
L4: MOV 24H,A
MOV A,13H
CJNE A,#02H , L5
MOV 26H,A
MOV A,12H
CJNE A,#04H , L6
L6: JC L7
CLR A
L7: MOV 25H,A
AJMP AA3
L5: JC L8
CLR A
L8: MOV 26H,A
MOV A,12H
CJNE A,#0AH , L9
L9: JC L10
CLR A
L10: MOV 25H,A
AJMP AA3
MOVE: CLR 09H
MOV R0, #14H
MOV A, @R0
INC A
CJNE A, #14H , WW
MOV A,#10H
WW: MOV @R0,A
AJMP AA3
TIM0: MOV TL0,#3CH ;赋时间常数
MOV TL1,#0BH
MOV C, P1.0 ;设定P1.0标志位
MOV 00H,C
MOV C,01H
ANL C,/00H
JNC QQ
SETB 08H
QQ: MOV C,P1.0
MOV 01H,C
MOV C,P1.1
MOV 02H,C
MOV C,03H
ANL C,/02H
JNC QQ1
SETB 09H
QQ1: MOV C,P1.1 ;设定P1.1标志位
MOV 03H,C
MOV C,P1.2
MOV 04H,C
MOV C,05H
ANL C,/04H
JNC QQ2
SETB 0AH
QQ2: MOV C,P1.2 ;设定P1.2标志位
MOV 05H,C
RETI
DELAY: MOV 36H,#0FFH ;执行延时子程式
CC2: MOV 37H,#0FFH
CC1: MOV 38H,#0AH
CC: DJNZ 38H,CC
DJNZ 37H,CC1
DJNZ 36H,CC2
RET
EXIT: MOV 23H,10H ;退出子程式
MOV 24H,11H
MOV 25H,12H
MOV 26H,13H
MOV 10H,#0BH
MOV 11H,#0BH
MOV 12H,#0BH
MOV 13H,#0AH
CLR TR0
CLR TR1
CLR 0AH
AJMP WW0
WORK: MOV 10H, 23H
MOV 11H, 24H
MOV 12H, 25H
MOV 13H, 26H
SETB 0EH ;工作子程式
CLR ET0 ;关T0中断
SETB TR1 ;启动定时器T1
WORK2: JB P1.2 , RR1 ;判退出键
AJMP EXIT
RR1: JNB 0DH , WORK2 ;判分钟定时
CLR 0DH
MOV R0,#11H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDM
ADDM: JC OUT_TO
ACALL CLR_0
MOV R0,#13H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#24H,ADDM1
ADDM1: JC OUT_TO
ACALL CLR_0
OUT_TO: MOV 23H,10H ;WORK退出
MOV 24H,11H
MOV 25H,12H
MOV 26H,13H
ACALL DISP
AJMP WORK2
ADD1: MOV A,@R0 ;WORK加一程式
DEC R0
SWAP A
ORL A,@R0
ADD A,#01H
DA A
MOV R3,A
ANL A,#0FH
MOV @R0,A
MOV A,R3
INC R0
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
CLR_0: CLR A ;WORK清零程式
MOV @R0,A
DEC R0
MOV @R0,A
RET
END
用汇编语言编写“一个数中有几个1几个0”的程式。
; 本程式通过编译,执行正确
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字串
; 入口:
; Str_Addr=字串地址(要求在资料段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:取游标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置游标位置
; 入口:Cursor_Row=行座标; Cursor_Col: 列座标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -------------------------------------
; 功能:键盘输入一个指定位数的十进位制数字,将其转换成二进位制数并储存在指定的记忆体单元。
; 入口:@@Digits=数字位数;di=储存输入的数字地址
; @@Type_Data=储存的资料型别,B=位元组型别,W=字型别。
; 出口:转换后的二进位制数储存在di所指的单元
Input_Digit Proc Near
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cl,@@Digits
xor ch,ch
push cx
@@Input: call GetCursor ;取游标位置
mov ah,1 ;从键盘接受一个字元
int 21h
cmp al,CR ;若键入的是回车,已经键入的数字不足N位
jz @@ASC_Dec ;转去处理已经键入的数字
cmp al,KBBack
jz @@KB_Back ;若是回空键,重新输入
cmp al,'0'
jb @@KBBack ;若低于数字'0',重新输入
cmp al,'9'
ja @@KBBack ;若低于数字'9',重新输入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置游标位置
jmp @@Input
@@Save_Dig: and al,0fh ;转换成二进位制数
stosb ;储存
loop @@Input ;接受下一个数字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;实际输入的数字位数
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理
dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进位制数
jcxz @@One_Digit ;若输入的数字只有一位,转去直接储存这个二进位制数
mov bx,10
@@Mul_Ten: lodsb
cbw
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit:lodsb
cbw
add ax,bp
@@Save_Ret: pop di
cmp @@Type_Data,'B' ;位元组型别?
jz $+5
stosw
jmp $+3
stosb
pop bx
pop cx
pop dx
ret
@@Digits db ? ;十进位制数字位数
@@Type_Data db 'B' ;储存的资料型别。B=位元组型别,W=字型别
@@Save_Tmp db 16 dup(?)
Input_Digit EndP
; -------------------------------------
; 功能:把AX中的二进位制无符号数转换成显式的十进位制ASCII码,并送显示屏显示
; 入口:AX=二进位制数
; 出口:在当前游标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; -------------------------------------
Number dw ?
Prompt_Str db 'Please input a number(<65535): $' ;输入提示资讯
Prompt_1 db CR,LF,"1's in the number: $"
Prompt_0 db CR,LF,"1's in the number: $"
Continue db CR,LF,CR,LF,'Continue(y/n)?$'
Start: push cs
pop ds
push cs
pop es
@@Input_Dec:mov @@Digits,5 ;十进位制数字位数
mov @@Type_Data,'w' ;储存的资料型别。B=位元组型别,W=字型别
lea di,Number ;储存输入的数字地址
Output Prompt_Str ;提示输入十进位制数字
call Input_Digit ;键盘输入指定位数的十进位制数
mov ax,Number ;输入的十进位制数传送给AX
xor bx,bx ;计数器置0,BH=1的个数,BL=0的个数
mov cx,16 ;16位二进位制数
clc ;清进位标志
Left_Move: shl ax,1 ;左移1位
jc $+6 ;若CF=1,1计数
inc bl ;若CF=0,0计数
jmp $+4
inc bh ;1计数
loop Left_Move
Output Prompt_1 ;提示显示1的个数
mov al,bh
xor ah,ah
call Dec_ASCII ;把AX中的二进位制无符号数转换成显式的十进位制ASCII码,并送显示屏显示
Output Prompt_0 ;提示显示0的个数
mov al,bl
xor ah,ah
call Dec_ASCII
Output Continue ;提示是否输入下一个数
Next_One: mov ah,1
int 21h
and al,0dfh ;转换成大写
cmp al,'N'
jz Exit_Proc ;不继续,结束程式
cmp al,'Y'
jnz Next_One ;不是有效字母,重新输入
call Output_CTLF ;输出一个回车、换行
call Output_CTLF
jmp @@Input_Dec ;继续,转去键盘输入数字
Exit_Proc: mov ah,4ch ;结束程式
int 21h
Code ENDS
END Start ;编译到此结束
用汇编语言编写一个简单的 两个数相减 的程式
DATAS SEGMENT
BUF0 DB 1
BUF1 DB 2
DATAS ENDS
STACKS SEGMENT
DB 100 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AL,BUF0
SUB AL,BUF1
CODES ENDS
END START
用汇编语言编写一个数值比较程式程式码
;温度范围为18~28,不在的就修正为23或25
XOR AH,AH
INT 16H
;输入的值放在AL中
CMP AH,16
JB chuli1
CMP AH,28
JA chuli2
MOV DL,AH
JMP ok
chuli1:
MOV DL,23
JMP ok
chuLI2:
MOV DL,25
JMP ok
ok:
;输出的值放在DL中
用汇编语言怎样编写一个程式99自减到1?
code segment
assume cs:code
start:
mov ax,99
a:dec ax
cmp ax,1
jNZ a
mov ah,4ch
int 21h
code ends
end start
哪位能用汇编语言写一个关于微控制器彩灯变换的程式
这个比较容易,举例如下:ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定时器方式,模式1
MOV TH0,#HIGH(65536-50000) ;50毫秒中断一次,灯状态变化一次
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV A,#0FEH ;灯初值,点亮第一个灯
MOV P1,A
MOV R2,#0
SJMP $
T0ISR:

CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
INC R2
CJNE R2,#8,T001 ;当R2值为0~7时做流水灯花样
T001:
JNC T002
RL A ;流水灯效果
MOV P1,A
RETI
T002:
CJNE R2,#10H,T003 ;当R2值为8~15时按表花样显示
MOV DPTR,#TAB ;花式灯效果
MOV A,R2
SUBB A,#8
MOVC A,@A+DPTR ;查表取值点亮灯
MOV P1,A
RETI
T003: ;16个状态回圈完后恢复初值,从头开始回圈。
MOV R2,#0
MOV A,#0FEH
RETI
TAB:
DB 55H,0AAH,0FH,0F0H,0FCH,0F3H,0CFH,03FH
END
假设有一组资料5,-4,0,3,100,-51变一程式判断每个数是大于,小于,还是等于0,并输出判断结果 用汇编
指标比较就OK了
ultraedit编写判断一个数大于等于或者小于0的程式
int func(int input)
{
if(input>0)
{
do something
printf("所输入的数大于0n");
return 3;
}
else if(input==0)
{
do something
printf("所输入的数等于0n");
return 2;
}
else
{
do something
printf("所输入的数小于0n");
return 1;
}
}