17066038 发表于 2016-9-20 16:41:11

实验10. 编译时为何总是显示第一行错误??

assume cs:codesg

datasg segment
db 16 dup(0)
db 'Hello',0
datasg ends

stacksg segment
db 32 dup(0)
stacksg ends

codesg segment
start:       
        ;用户给出参数:行、列、颜色
        mov dh,4
        mov dl,3
        mov cl,01000011B
       
        ;设置栈段
        mov ax,stacksg
        mov ss,ax
        mov sp,32
       
        ;设置数据段
        mov ax,datasg
        mov ds,ax
       
        call showstr

        mov ax,4c00H
        int 21H
       
showstr:
        ;说明:将字母转换为大写,字符串遇到0结束
        ;参数:
        ;结果:
       
        ;子程序中要用到的寄存器入栈       
        push ax                       
        push bx
        push cx               
        push si
        push di
       
        ;参数放入内存,解放寄存器给子程序使用
        mov ds:,dh
        mov ds:,dl
        mov ds:,cl
       
        ;指定显存位置,并初始化参数
        mov ax,0b800H       
        mov es,ax       
        add byte ptr ds:,2        ;0.1行不显示

        ;清空屏幕中用户给定的行
        mov al,byte ptr ds:
        mov ah,0a0H
        mul ah
        mov bx,ax
        mov si,0
        mov cx,160
z1:        mov byte ptr es:,0
        inc si
        loop z1
       
        mov si,0
        mov di,0
        mov cx,0
z2:        mov cl,ds:
        jcxz z0                                ;判断字符串结束标志0
        mov byte ptr es:,cl
        mov cl,ds:
        mov byte ptr es:,cl        ;设置用户给定的颜色
        inc si
        add di,2
        jmp z2

       
z0:        pop di
        pop si
        pop cx
        pop bx
        pop ax
        ret
       
codesg ends

end start

qwe1231069 发表于 2016-9-20 19:46:21

本帖最后由 qwe1231069 于 2016-9-20 19:49 编辑

masm5编译通过,楼主用masm5试试


17066038 发表于 2016-9-21 08:58:41


全选,复制到另一个记事本里,保存再编译,竟然可以了,这是什么问题导致的,有大神能解吗??

17066038 发表于 2016-9-21 09:00:18

2#的回答我理解,我想弄明白:
“”全选,复制到另一个记事本里,保存再编译,竟然可以了!“”,这是什么问题导致的,有大神能解吗??
页: [1]
查看完整版本: 实验10. 编译时为何总是显示第一行错误??