|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 位的存储器显然无法保存这么大的数
应该改成下面这样
|
|