汇编语言作业(五)
班级: 计算机14-1 姓名: 许恺 学号: 2014011329 日期: 2016.4.22
一、编写程序
1.设有字数组X、Y和Z,各有10个元素,计算:
Z0=X0-Y0 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
要求:X、Y两个数组的数均为两位十进制数,直接放在数据段中,无需从键盘输入,且两数相加或相减之后是一位或两位数(有可能是负数)。
输出:以十进制形式输出计算后的结果(即:数组z的内容)
提示:对于负数的显示,在判断该数是负数后,可先输出一个负号,然后对该数求补,再输出相应的正数,例如,-15,先输出一个负号,求补后,该数变成了15,直接输出就可以了。
(1)程序清单:
data segment
x dw 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h
y dw 11h,12h,13h,14h,15h,16h,17h,18h,18h,20h
z dw 10 dup(?)
logic_ruler dw 0010001000b
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov dx,logic_ruler
mov cx,10
mov bx,0
l1:mov ax,x[bx]
shr dx,1
jc l2
add ax,y[bx]
jmp l3
l2:sub ax,y[bx]
cmp ax,0
jge l3
neg ax
push dx
mov dh,al
mov dl,'-'
mov ah,02h
int 21h
mov al,dh
mov ah,0
pop dx
l3:mov z[bx],ax
push dx
push bx
MOV BH,Al
MOV BL,0AH
DIV BL
ADD AH,30H
ADD AL,30H
MOV BX,AX
MOV DL,BL
MOV AH,02H
INT 21H
MOV DL,BH
MOV AH,02H
INT 21H
mov dl,' '
mov ah,02h
int 21h
pop bx
pop dx
add bx,2
loop l1
mov ah,4ch
int 21h
main endp
code ends
end start
(2)运行结果(截图):
二、编程体会
真的是难,本以为书上有现成的例题就不着急写,最后才发现那么不一样,浪费好长时间又去修改程序以及优化程序,最终还是做出来了,开始感觉根本做不出来,最后还是做出来了,也许编程的魅力就在于此吧,本以为绝对做不到的事情,却做出来了,太有成就感。