|
主题 : : 实验10 编写子程序编译通过,结果让我失望了!! [待解决] |
回复[ 7次 ]
点击[ 536次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-01-21 01:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
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: dec dh
dec dl
mov ax,0
mov al,dh
mov bx,0
mov bl,10
mul bl
mov bx,ax
mov ax,0b800h
add ax,bx
mov es,ax
mov ax,0
mov al,dl
add al,dl
mov bx,ax
mov di,0
ok: mov ch,cl
mov cl,[si]
push cx
mov ch,0
jcxz return
pop es:[bx+di]
add di,2
inc si
jmp short ok
return: ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-01-21 01:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
发错了这个是修改过的
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: dec dh
dec dl
mov ax,0
mov al,dh
mov bx,0
mov bl,10
mul bl
mov bx,ax
mov ax,0b800h
add ax,bx
mov es,ax
mov ax,0
mov al,dl
add al,dl
mov bx,ax
mov di,0
mov ch,cl
ok: mov cl,[si]
push cx
mov ch,0
jcxz return
pop es:[bx+di]
add di,2
inc si
jmp short ok
return: ret
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-01-21 01:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
运行出错不知道错在哪,这几天还在找方法检查自已写的错误!! | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-01-21 08:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
CMD下报错,是因为没设置堆栈,DEBUG默认SS=DS=CS,开头加两句
start: mov ax,2000h
mov ss,ax
mov sp,100h
//下面是你的程序 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-01-26 01:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
-t
AX=0004 BX=0004 CX=0000 DX=0702 SP=00FC BP=0000 SI=0010 DI=0020
DS=2196 ES=B846 SS=2000 CS=2198 IP=0048 NV UP DI PL NZ AC PO NC
2198:0048 B500 MOV CH,00h
Trace Interrupt
-t
AX=0004 BX=0004 CX=0000 DX=0702 SP=00FC BP=0000 SI=0010 DI=0020
DS=2196 ES=B846 SS=2000 CS=2198 IP=004A NV UP DI PL NZ AC PO NC
2198:004A E309 JCXZ 0055 ;yes
Trace Interrupt
-t
AX=0004 BX=0004 CX=0000 DX=0702 SP=00FC BP=0000 SI=0010 DI=0020
DS=2196 ES=B846 SS=2000 CS=2198 IP=0055 NV UP DI PL NZ AC PO NC
2198:0055 C3 RET
Trace Interrupt
-t
AX=0004 BX=0004 CX=0000 DX=0702 SP=00FE BP=0000 SI=0010 DI=0020
DS=2196 ES=B846 SS=2000 CS=2198 IP=0720 NV UP DI PL NZ AC PO NC
2198:0720 0000 ADD [BX+SI],AL
Trace Interrupt
按照楼上的意思加了有了一些进展,结果只显示了一个字符w,于是用debug跟踪如上,到ret 的时候结果出问题了!!不知道是哪里写错了!! | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-01-26 01:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
|
|
|
|
|
[第6楼]
[ 回复时间:2010-01-26 19:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
经过一晚上的努务终与完成了呵呵真不容易发现自已的错误大家都来恭喜我吧代码始下
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov ax,data
mov ss,ax
mov sp,200h
mov dh,8
mov dl,3
mov cl,2
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: dec dh
dec dl
mov ax,0
mov al,dh
mov bx,0
mov bl,10
mul bl
mov bx,ax
mov ax,0b800h
add ax,bx
mov es,ax
mov ax,0
mov al,dl
add al,dl
mov bx,ax
mov di,0
mov ch,cl
ok: mov cl,[si]
push cx
mov ch,0
jcxz return
pop cx
mov es:[bx+di],cx
add di,2
inc si
jmp short ok
return: pop cx
ret
code ends
end start | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-02-06 02:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18 |
继续前断时间的问题,子程序写的不是很完善,直接导致后面的课程设计一失败,问题总是出在自已应该push的时候没有push好了不说了看代码
assume cs:code,ds:data
data segment
db 16 dup(0)
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
data ends
code segment
start:mov ax,data
mov ds,ax
mov ss,ax
inc ax
mov es,ax
mov ax,0
mov sp,ax
call show_str1
mov ax,4c00h
int 21h
show_str1: push ax
push bx
push cx
push dx
mov dx,0208h
mov ax,0
mov bx,0
mov cx,21
d: mov ax,es:[bx]
push ax
mov ax,es:[bx+2]
push ax
pop ds:[2]
pop ds:[0]
push cx
mov cx,02h
call show_str
pop cx
inc dh
add bx,4
loop d
pop dx
pop cx
pop bx
pop ax
ret
show_str: push di
push si
push dx
push bx
push es ;注意ss:sp指向长度
dec dh ;送入变量dh行号,dl为排号注意寄存器的使用cl为颜色
dec dl
mov ax,0
mov al,dh
mov bx,0
mov bl,10
mul bl
mov bx,ax
mov ax,0b800h
add ax,bx
mov es,ax
mov ax,0
mov al,dl
add al,dl
mov bx,ax
mov di,0
mov ch,cl
ok: mov cl,[si]
push cx
mov ch,0
jcxz return
pop cx
mov es:[bx+di],cx
add di,2
inc si
jmp short ok
return: pop cx
pop es
pop bx
pop dx
pop si
pop di
ret
code ends
end start
code ends | | |
|