马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我这样写为什么会报错?assume cs:code,ds:data,es:stack
data segment
db 'Welcome to masm!',0
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
show_str: mov ax,0b8000h
mov es,ax;将显存段地址放入es
mov bl,dl ;将列号放入bx
mov bh,0
mov di,bx ; 将列号从bx移入di
mov bl,dh ; 将行号放入bx
mov bh,0
mov al,cl ;将颜色数据存al
mov cx,bx;觉得乘法太麻烦了,用加法计算
mov bx,0
hdb: add bx,160
loop hdb
mov cx,di;计算列数
mov di,0
ldb: add di,2
loop ldb
s: mov cl,ds:[si]
mov ch,0
jcxz next
mov es:[bx+di],cl;移数据到显存
mov es:[bx].1[di],al;移颜色到显存
inc si
add di,2
jmp short s
next: ret
code ends
end start
编码报错说division by 0 or overflow
49922+463483 bytes symbol space free
本帖最后由 jackz007 于 2020-2-22 13:42 编辑
0b8000h ? 这一句溢出了,一个 16 位的存储器显然无法保存这么大的数 应该改成下面这样
|