|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 qwe1231069 于 2016-10-12 20:59 编辑
这是实验十的代码,我想改一下。让它可以直接调用,不用担心寄存器的值,也就是把它所用的寄存器都加入堆栈。我加了三个push和pop
- assume cs:code,ds:data
- data segment
- db'qweqwrt',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:
- push es
- push ax
- push bx
- mov ax,0b800h
- mov es,ax ;初始化
-
- mov ah,0
- mov al,160
- mul dh
- mov bx,ax
- mov al,2
- mul dl
- add bx,ax ;bx==要复制的显存地址
-
- mov ah,cl
- mov dh,cl
- s: mov cl,dh
- mov al,ds:[si]
- mov ch,al
- mov cl,0
- jcxz ol
- mov word ptr es:[bx],ax ;ax是复制的值
- inc si
- add bx,2
-
- loop s
-
- pop bx
- pop ax
- pop es
-
- ol:
- ret
-
-
- code ends
- end start
复制代码
程序返回时竟然回到了start处,不明白啊。如果去掉push和pop一切就正常了,我这里哪里错了呢? |
|