- [huangqihang] 哈,终于完善了,我找了个地址存起来了。 06/26 21:45
- [游客] 问题出在,你数据在分解成数字字符的过程中,明明你的数据已经是0了,可是还在进行操作,所以,你得到的余 06/26 09:09
- [游客] 前面有一些无用的0,我不知道怎么去掉 ================= 首先应该知道这些0是怎 06/26 09:01
- [游客] 呵呵。这次好多了。多理解题目的意思。后面还有两个子程序呢,做了之后,就可以运用到课程设计1中了,要仔 06/23 16:23
- [mess] 程序结果没问题,根据我们平时十进制的除法的习惯,很容易能弄明白公式~_~ 06/23 12:26
- [huangqihang] 哦哦,我居然没有发现它要写的是一个调用的子程序,不过改正也很容易。我就不改了。 06/22 23:20
- [游客] 哦,是这样啊,我都还不知道它给出dh和dl是干什么的呢。 我把它改正好了: assume cs: 06/22 22:06
- [wsrf] 你的子程序只能在一个固定的行和列位置显示,根本就不符合要求。行和列是由dh和dl中的值来决定的。并且 06/22 10:59
[2009-06-21 22:24] 实验10 编写子程序
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:mov ax,0b800h
mov es,ax
s: mov al,[si]
mov es:[bx+0466h],al
inc si
inc bx
mov ax,7ah
mov es:[bx+0466h],ax
inc bx
mov cx,[si]
inc cx
loop s
ret
code ends
end start
不是太长,我就不注解了。
[ wsrf 发表于 2009-06-22 10:59 ]
你的子程序只能在一个固定的行和列位置显示,根本就不符合要求。行和列是由dh和dl中的值来决定的。并且进入子程序的起始代码应该首先保存好现场,以便返回主程序后子程序中用到的各寄存器能够保持原来值不变。
[ 游客 发表于 2009-06-22 22:06 ]
哦,是这样啊,我都还不知道它给出dh和dl是干什么的呢。
我把它改正好了:
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,0cah
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:mov ax,0a0h
dec dh
mul dh
mov bx,ax
mov al,2
mul dl
sub ax,2
mov di,ax
mov ax,0b800h
mov es,ax
mov dl,cl
s: mov al,[si]
mov es:[bx+di],al
inc si
mov es:[bx+di+1],dx
add di,2
mov cx,[si]
inc cx
loop s
ret
code ends
end start
[ 游客 发表于 2009-06-23 16:23 ]
呵呵。这次好多了。多理解题目的意思。后面还有两个子程序呢,做了之后,就可以运用到课程设计1中了,要仔细做啊。