微机原理 – 作业4(程序设计)
要求:用EMU8086平台编程并调试。给出程序源代码,并附截图展示程序运行结果。
1.在以DAT1为首址的内存中存放着多个8位有符号数,以“*”结尾,要求计算出其中所有正数的平均值,并将其存在DAT2中。
2.设内存单元A、B、C 中分别存放着三个8位有符号数,试根据公式X= 5A+7B-6C计算X的值, 将X值存入XMU单元。
3.编程求8个非压缩BCD数的平均值。
4.将BUF1中的带符号字节数X,与BUF2中的带符号字节数Y,按下式计算Z=|X-Y|,将结果Z存入RESULT中。
5.设数据段中有两个各有10个字节元素的无符号数组DA1和DA2。试编制程序,统计DA1中大于、等于、小于DA2对应元素的个数。
6.有数组 X(X1,X2,……,X10) 和 Y(Y1,Y2,……,Y10),编制程序段计算:
Z1 = X1 + Y1
Z2 = X2 + Y2
Z3 = X3 - Y3
Z4 = X4 - Y4
Z5 = X5 - Y5
Z6 = X6 + Y6
Z7 = X7 - Y7
Z8 = X8 - Y8
Z9 = X9 + Y9
Z10= X10 + Y10
结果存入Z数组。(X、Y、Z均为字变量)
1.
data segment
dat1 db 10h,20h,81h,'*'
dat2 db 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
xor dx,dx
lea si,dat1
cycle:
cmp [si],'*'
jz next
add [si],0
js fu
inc ah
add dl,[si]
adc dh,0
fu:
inc si
loop cycle
next:
mov bl,ah
mov ax,dx
idiv bl
mov dat2,al
mov ax, 4c00h
int 21h
ends
end start
2.
data segment
a db 2
b db 3
c db 4
xmu dw 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
mov al,a
mov bl,5
imul bl
mov xmu,ax
mov al,b
mov bl,7
imul bl
adc xmu,ax
mov al,c
mov bl,6
imul bl
sbb xmu,ax
mov ax, 4c00h
int 21h
ends
end start
3.
data segment
x db 1h,2h,3h,1h,2h,3h,1h,2h
x_ dw 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
xor cx,cx
mov si,offset x
mov cx,8
cycle:
mov bl,[si]
add al,bl
adc ah,0
inc si
loop cycle
mov bl,8h
idiv bl
xor ah,ah
add al,0
aaa
mov x_,ax
mov ax, 4c00h
int 21h
ends
end start
4.
data segment
buf1 db 1h
buf2 db 4h
result dw 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
mov al,buf1
mov bl,buf2
cmp al,bl
clc
jl jump
sbb al,bl
jmp to
jump:
clc
sbb bl,al
mov ax,bx
to:
mov result,ax
mov ax, 4c00h
int 21h
ends
end start
5.
data segment
da1 db 1h,2h,1h,30h,6h,8h,11h,20h,70h,10h
da2 db 1h,2h,1h,50h,7h,9h,22h,10h,50h,9h
above db 0
equal db 0
below db 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
lea si,da1
lea di,da2
mov cx,10
cld
cycle:
mov al,[si]
mov bl,[di]
cmp al,bl
ja ab
je eq
inc below
jmp jump
ab:inc above
jmp jump
eq:inc equal
jmp jump
jump:
inc si
inc di
loop cycle
mov ax, 4c00h
int 21h
ends
end start
6.
data segment
x dw 2h,2h,2h,2h,2h,2h,2h,2h,2h,2h
y dw 2h,2h,2h,2h,2h,2h,2h,2h,2h,2h
z dw 10 dup(0)
ruler dw 0c4c0h
z_ad dw 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
lea si,x
lea di,y
mov dx,ruler
mov cx,10
cycle:
mov ax,[si]
mov bx,[di]
shl dx,1
jnc _
add ax,bx
lea si,z
add si,z_ad
mov [si],ax
jmp jump
_:
sub ax,bx
lea si,z
add si,z_ad
mov [si],ax
jump:
lea si,x
add si,z_ad
add si,2
add di,2
add z_ad,2
loop cycle
mov ax, 4c00h
int 21h
ends
end start
https://blog.csdn.net/supersmart_dong/article/details/79262737