简单的循环程序

简单的循环程序,第1张

首先一点, switch(c++)

是先取值,再自加。 所以当c='A'的时候, 执行case 'A', 而不是case 'B',

所以, 依次为

c='A' k++, k=1 退出switch 后 再次自加, k=2

'B': k--后k+=3, k=4,然后,switch外面的k++, k=5

'C': k+=3后 k++, k=9

'D':k%=2; k=1 注意这里是continue, 所以没有后面switch外的k++了。

'E':k=10 k=10 自加 k=11

'F': k=k/2=5 然后switch后面 k++, k=6

此时c已经自加过,c='G'退出循环。

输出k=6

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

    MOV A,#0FEH

    MOV R2,#10

LOOP:

    MOV P0,A

    LCALL DELAY

    MOV P0,#0FFH

    LCALL DELAY

    DJNZ R2,LOOP

    MOV R2,#10

    RL A

    SJMP LOOP

DELAY:

    MOV R3,#200

DLY:

    MOV R4,#250

    DJNZ R4,$

    DJNZ R3,DLY

    RET

    END

#include <stdioh>

int main()

{

int i,n;

for(i=-3;i<=3;i++)

{

n=i>0i:-i;

printf("%s\n",7-n,7-2n,"");

}

return 0;

}

主要程序片段如下:

disBuffer db '123456$' ;要显示的字符串

col db 5 ;在屏幕上的位置

row db 10

main:

mov ax,200h

mov bx,0

mov dl,[col]

mov dh,[row]

int 10h ;以上几行用于定位当前光标位置

lea dx,disBuffer

mov ax,0900h

int 21h ;显示字符串;

call funcRL ;

mov cx,1 ;延时控制,可以根据要求设置1、2、3……

call funcDelay ;

mov ah,0bh

int 21h ;看下键盘有无输入,如果有就退出程序

or al,al

jz main ;没有输入,去继续循环

mov ax,4c00h

int 21h

funcRL: ;左移一位的子程序

push ax

push cx

push si

mov cx,5

lea si,disBuffer

mov bl,[si]

inc si

RlLoop:

mov al,[si+1]

mov [si],al

inc si

loop RlLoop

mov [si],al

pop si

pop cx

pop ax

ret

funcDelay: ;; 延时子程序,如果没有延时,太快了,无法看清字符

push bx

push cx

push dx

dLoop1:

mov bx,1000h

dLoop2:

mov dx,0ffffh

dLoop3:

sub dx,1

jnz dLoop3

sub bx,1

jnz dLoop2

loop dLoop1

pop dx

pop cx

pop bx

ret

程序没有调试,大意如些。希望能帮到你。

这个程序是你自己写的吗,程序问题很多呢,没法实现循环,只执行一次就退出了。

这样修改一下:

data segment

var8 db 01111011b

data ends

code segment

assume cs:code, ds:data

start: mov ax, data

mov ds, ax

mov al, var8

call pnbin

mov ah,4ch

int 21h

;以上两行原来是死循环,不能正常结束

pnbin proc

mov ah,10000000b

next: test ah,ah ;要是用你原来的循环控制方式只能执行7次

jz exit ;改成这样就可以了

push ax

test al,ah

jz zero

mov al,'1'

jmp about

zero: mov al,'0'

about: mov dl,al

mov ah,02h

int 21h

pop ax

shr ah,1

jmp next ;这里是显示完一个位,这时应跳转到开始判断是否结束循环,而不应该直接结束。

exit:

ret

pnbin endp

code ends

end start

你原来的程序构成循环是想这样实现,把10000000和00000001相与,结果不为零就把10000000左移一位然后循环,然后再判断,再左移,再循环。这样实际上循环7次就结束了。

做过改动的地方都加了注释,这个循环的形成主要是判断ah的内容是不是0,如果不是零,就把ah右移一位,然后执行一次循环体,然后再判断,再执行,直到ah为零为止。

其实没有必要这么麻烦啊,把子程序这样写不是更好一些吗?

pnbin proc

mov cx,8

next:

shl al,1

push ax

jc disp1

mov dl,'0'

jmp disp

disp1:

mov dl,'1'

disp:

mov ah,2

int 21h

pop ax

loop next

ret

pnbin endp

;(1) 片内从30H起始的连续10个单元内容送21H,22H,23H....2AH,

; 求和后送40H,

ORG 0000H

MOV R0,#30H

MOV R7,#10

MOV A,#21H

LOOP:

MOV @R0,A

DJNZ R7,LOOP

MOV R0,#30H

MOV R7,#10

MOV A,#00H

LOOP:

ADD A,@R0

DJNZ R7,LOOP

MOV 40H,A

SJMP $

;############################

;(3) 如果看成字来进行5个字的数据加法求和,结果放在40H和41H里面低位低字节,

;高位高字节求和。

ORG 0000H

MOV R0,#30H

MOV R1,#31H

MOV 40H,#00H

MOV 41H,#00H

MOV R7,#5

LOOP:

MOV A,40H

ADD A,@R0

MOV 40H,A

MOV A,41H

ADDC A,@R1

MOV 41H,A

INC R0

INC R0

INC R1

INC R1

DJNZ R7,LOOP

SJMP $

以上就是关于简单的循环程序全部的内容,包括:简单的循环程序、用汇编语言编制循环闪烁灯程序、C语言编程循环程序!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9705603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存