持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情。
读程序
建立00H~09H~00H 19个数,00H~09H数据逐渐增大,09H~00H逐渐减小,即SI指针所表示的地址中依次填入00H~09H~00H19个数。
ORG 100H
MOV SI, 0 // SI中的值为0
MOV CL, 09H // CL指针的值为9
XOR AX, AX // AX为0,里面的寄存器AL、AH也为0
PPE1: MOV [SI], AL // [0000] = 0
INC SI // 0001
INC AL // 01
DEC CL // 指针减1
JNZ PPE1 //运算结果不为0则跳转到PRE1
MOV CX, 0AH // 重新设置CX计数器的值为10
PPE2: MOV [SI], AL
INC SI
DEC AL
LOOP PPE2
INT 20H
RET
编程实现两个32位的二进制数据(或4个字节)对应字节两两相加。
org 100h
vec1 db 1,2,5,6 // 定义一个数组,名字为vec1,这个数组的地址,也就是第一个数存放的地址为0100H
vec2 db 3,5,6,1
vec3 db 4 dup(0)
start:
lea si,vec1 // 取vec1这个数组的地址,或者说这个数组的第一个数的地址
lea bx,vec2
lea di,vec3
mov cs,4 // 数据指针
sum:
mov al,[si] // 以SI中的内容作为地址,然后将这个地址中的内容送到寄存器al中
add al,[bx] // 以bx中的内容作为地址,然后将这个地址中的内容与寄存器al中的内容相加
mov [di],al // 将结果送到[di]中
inc si// 指针加1
inc bx
inc di
loop sum// 循环,次数由cx中的内容确定,cx自动减1,不为0就跳转到sum
ret
程序填空
2、设有200个字节数据(补码),存放在数据段中EA=3000H的存储区内,编程实现从该数据区中找出最大数并存入同一数据段EA=3200H的单元中。
MAX:
MOV BX,3000H
MOV AL,[BX]
MOV CX,199
LOOP1:
INC BX
CMP AL,[BX]
JGE LOOP2 // 运算结果大于或等于则跳转到LOOP2
MOV AL,[BX] // 保证AL中的数是最大的
LOOP2:
DEC CX
JNZ LOOP1
MOV [3200H],AL
写程序
4、在数据段中从0500H单元开始存放着18个8位带符号数,要求把其中的正数传送至2000H开始的存储区;负数传送至3000H开始的存储区,且分别统计正数和负数的个数,并将正数和负数的个数分别存入3200H和3201H单元中。