好友
阅读权限 10
听众
最后登录 1970-1-1
刚来吾爱破解 ,小小白一枚,分享一些微机原理课上自己写的8086汇编源码给和我一样的小小白,一起学习
一个涉及到程序循环和分支选择的简单程序来练练手(/ω\)。
将数据0FFH、02H、0FCBH、03H、1000H、0F3H中大于或等于0FFH的数存入以偏移地址100H为起始的内存中,小于0FFH的数存入以偏移地址200H为起始的内存中。
源码如下:
DATA SEGMENT
NUM DW 0FFH,02H,0FCBH,03H,1000H,0F3H
ORG 100H ;自定义的内存空间的偏移地址起始,下同
M DW 6 DUP(?) ;定义一段字长为6的内存空间用于存储数值比0FFH大的数
ORG 200H
N DW 6 DUP(?) ;定义一段字长为6的内存空间用于存储数值比0FFH小的数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,6 ;循环执行的次数,每执行完一次循环,CX的值减1,直至CX的值变为0才退出循环
MOV SI,0
MOV DI,0
MOV BP,0
L:
MOV BX,NUM[SI]
MOV DX,0FFH
CMP BX,DX ;比较存储在BX和DX中的数的大小
JNC L1 ;若BX中的数大于DX中的数,则直接执行L1处的指令;若BX中的数小于DX中的数,则继续顺序执行往下的指令
MOV DX,BX ;将小于0FFH的数(即BX中的数)送入DX,DX中原有的数0FFH将被覆写
MOV N[DI],DX ;将DX中的数写入内存
INC DI ;偏移地址加2,下同
INC DI
INC SI
INC SI
JMP L2 ;跳转至标记L2,否则将继续往下执行L1处的指令,造成程序逻辑错误
L1: ;当L1处的指令执行完毕后,继续往下执行L2处的指令
MOV M[BP],BX ;将大于0FFH的数写入内存
INC BP
INC BP
INC SI
INC SI
L2:
LOOP L ;返回标记L以此循环执行,直至CX的值变为0
MOV AH,4CH
INT 21H
CODE ENDS
END START
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。