0%

8086汇编语言程序设计简要记录(一)

写了一个涉及到程序循环和分支选择的简单程序来练练手(/ω\)。

将数据0FFH02H0FCBH03H1000H0F3H中大于或等于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