当前位置: 代码迷 >> 汇编语言 >> 程序运行后,command自动结束是咋回事
  详细解决方案

程序运行后,command自动结束是咋回事

热度:591   发布时间:2013-02-26 00:00:00.0
程序运行后,command自动结束是怎么回事
是书上的一道练习题,写一个子程序,用来显示字符串,然后用主程序测试
话说LZ初学汇编,刚写完代码,一看行数就知道多半要杯具,调试之后,LZ不禁感叹,自己真是神机妙算啊

Assembly code
assume cs:code,ds:datadata segment    db 'abcdefg123',0    db 8 dup (0)data endscode segment    ;主程序    ;设置参数,调用子程序show_str    main:    mov ax,data    mov ds,ax    mov si,0    mov ss,ax    mov sp,19    mov cl,10001111b    call show_str        mov ax,4c00h    int 21h    ;子程序 show_str    ;功能 显示指定字符串    ;参数 dh=行号,dl列号,cl前背景色/闪烁/高亮,ds:si字符串首地址    ;返回 无    show_str:    ;寄存器现场保护    push ax    push bp    push es    ;正文    mov al,160    mul dh    mov bp,ax    mov al,2    mul dl    add bp,ax    mov ax,0b800H    mov es,ax    mov di,0    mov ch,0    mov ah,cl    s:    mov cl,[si]    jcxz s1    mov al,[si]    mov es:[bp+di],al    mov es:[bp+di+1],ah    inc si    add di,2    jmp s        ;返回    s1:    pop es    pop bp    pop ax    retcode endsend main




------解决方案--------------------------------------------------------
1. call 之前设置下 dx
2. sp 设置为 19 ?dos16 模式下,sp 要对齐到 word 的
3. 这样的程序,在纯 dos 下会有更好、可靠的效果,至少也是全屏模式吧
------解决方案--------------------------------------------------------
在程序倒数第三行加上,mov al,0
int 16h
这两行就ok了
探讨
是书上的一道练习题,写一个子程序,用来显示字符串,然后用主程序测试
话说LZ初学汇编,刚写完代码,一看行数就知道多半要杯具,调试之后,LZ不禁感叹,自己真是神机妙算啊


Assembly code

assume cs:code,ds:data

data segment
db 'abcdefg123',0
db 8 dup (0)
data ends

……
  相关解决方案