实验10. 编译时为何总是显示第一行错误??
assume cs:codesgdatasg 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:49 编辑
masm5编译通过,楼主用masm5试试
全选,复制到另一个记事本里,保存再编译,竟然可以了,这是什么问题导致的,有大神能解吗?? 2#的回答我理解,我想弄明白:
“”全选,复制到另一个记事本里,保存再编译,竟然可以了!“”,这是什么问题导致的,有大神能解吗??
页:
[1]