- 博客(0)
- 资源 (3)
- 收藏
- 关注
汇编8086资源下载
; multi-segment executable file template.
data segment
; add your data here!
pkey1 db "Please input number1...",0ah,0dh,"$"
pkey2 db "Please input number2...",0ah,0dh,"$"
new_line db 0ah,0dh,"$"
num1 dw 0 ;数字是两位数
num2 dw 0 ;数字是两位数
temp db 0,0,0,0 ;零时变量,方便计算输出的十进制
;count dw 3 ;输出所用参数,记录输出的位数
table dw 0 ;地址表,为子程序提供两个参数
dw 0
result dw 0 ;存结果的数据
ends
stack segment
dw 128 dup(0)
ends
code segment
main proc far
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
;-------------------------
lea dx, pkey1
mov ah, 9
int 21h
;提示输入数字1
;第一个读入的数是十位数,第二个读入的是个位数
;经过处理后放到num1的内存当中
mov ah, 1
int 21h ;存在al ,是ASCII码的形式
sub al,30h
mov bl,10
mul bl
mov num1,ax ;目前存的是十位
mov ah,1
int 21h
sub al,30h
cbw
add ax,num1
mov num1,ax
;mov ax,num1 ;测试num1中的数据存入正确
;call printdec
lea dx, new_line ;输出回车换行美观格式
mov ah, 9
int 21h
;--------------------------------------------
lea dx, pkey2
mov ah, 9
int 21h
;提示输入数字1
;第一个读入的数是十位数,第二个读入的是个位数
;经过处理后放到num1的内存当中
mov ah, 1
int 21h ;存在al ,是ASCII码的形式
sub al,30h
mov bl,10
mul bl
mov num2,ax ;目前存的是十位
mov ah,1
int 21h
sub al,30h
cbw
add ax,num2
mov num2,ax
lea dx, new_line ;输出回车换行美观格式
mov ah, 9
int 21h
;mov ax,num2 ;测试num2中的数据存入正确
;call printdec
;=============================================
;---已经获取了两个数,将他们传入子函数计算ADD---
;用简单的寄存器传值
mov table,offset num1
mov table+2,offset num2
mov bx,offset table ;通过bx传入子程序参数
call work_add
;---------------------------------------------
;值返回的形式显示计算结果
;mov result,bx ;将值传入内存中
;mov ax,result ;调用值函数输出
;call printdec
;---------------------------------------------
;-------------------return-------------------
mov ax, 4c00h ; exit to operating system.
int 21h
main endp
;----------写子程序
;***********************计算加法子程序——begin********************
;通过bx传入地址表
;通过bx传出计算结果
work_add proc near
push ax
push cx
push si
push di
mov si,[bx]
mov di,[bx+2]
mov ax,[si]
mov cx,[di]
add ax,cx
;=================================
;调用嵌套子函数的方式显示计算结果
call printdec
;=================================
pop di
pop si
pop cx
pop ax
ret
work_add endp
;***********************计算加法子程序——end**********************
;---------------------定义子函数输出十进制--------------------
;***************************输出十进制程序*************************
printdec proc near
;mov count,0
mov temp,0
mov temp+1,0
mov temp+2,0
mov temp+3,0
;每次调用子函数的时候都将零时的变量清空,
;使得下次访问的时候不会冲突
push si
push dx
push cx
push bx
;push ax
;最后要打印的是Y里面的
mov si,2
;mov ax,Y; 进入子程序之后ax存的就是于要输出的值
;cwd
rotatep:
;mov ah,0 ;这个会使得ax的高位变成0 数据丢失 ;把al拓展成ax
mov bl,10
div bl
;ah 存放余数 ;余数可以直接存进temp里
;al,商,要存到ax里,然后拓展
mov temp[si],ah ;如果反着存那么就是从高位到低位
mov ah,0
add al,0 ;使能标志位
jz printout
;inc count ;记录数字的位数
dec si
jmp rotatep
printout:
mov al,temp ;存的是8
;mov ah,temp+1 ;存的是0
;add count,1
mov si,0
mov cx,3
;*********************************
;这里要注意 ,不能实现存进count一个3进行循环
;也就是要每次改输出位数是修改这里的3;
putbyte:
mov al,temp[si]
add al,30h
mov dl,al
inc si
;jmp putbyte
mov ah,2
int 21h
loop putbyte
;pop ax
pop bx
pop cx
pop dx
pop si
ret
printdec endp
;***************************输出十进制程序*************************
ends
end start ; set entry point and stop the assembler.
2017-10-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人