NTVDM CPU 遇到无效指令

地区码空白 2009-11-25 02:10:08
我写了下面段程序,想把“welcome to masm!”输出来.
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax

mov ax,0b800h
mov ss,ax
mov bp,0000h
mov bx,0000h

mov cx,16

s: mov al,[bx]
mov [bp],al
inc bx
inc bp
mov [bp],byte ptr 0002h
inc bp
loop s

mov ax,4c00h
int 21h
code ends
end start
可是一运行就弹出NTVDM CPU遇到无效指令 CS:1106 IP:8828 OP:63 75 6d 65 6e
在下还刚学,希望各位帮帮忙,谢谢了
...全文
73 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
地区码空白 2009-11-25
  • 打赏
  • 举报
回复
谢谢两位了,我也知道可以用ES,实际上我也那样写了,但是我写这个是发现不行,想弄清楚为什么而已,谢谢了啊
nanlingcg 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 qcxhh 的回复:]
我写了下面段程序,想把“welcome to masm!”输出来.
assume cs:code,ds:data
data segment
  db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax

mov ax,0b800h
mov ss,ax
mov bp,0000h
mov bx,0000h

mov cx,16

  s:  mov al,[bx]
mov [bp],al
inc bx
inc bp
mov [bp],byte ptr 0002h
inc bp
loop s

mov ax,4c00h
int 21h
code ends
end start
可是一运行就弹出NTVDM CPU遇到无效指令  CS:1106 IP:8828 OP:63 75 6d 65 6e
在下还刚学,希望各位帮帮忙,谢谢了
[/Quote]

栈保护!
理论上这个程序是可行的,实际运用中如果不是实验需要,不要把显存位置置成SS(栈保护,会有问题)。
可以把SS改成ES,在[BP]前面加上ES,就可以正常运行了!
BAYNPU 2009-11-25
  • 打赏
  • 举报
回复
data segment
db 'Welcome to masm!',0
data ends
code segment
assume cs:code,ds:data
start:
mov dh,1
mov dl,1
mov cl,0cah
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
push cx
push si
mov al,0A0h
dec dh
mul dh
mov bx,ax
mov al,2
mul dl
sub ax,2
add bx,ax
mov ax,0B800h
mov es,ax
mov di,0
mov al,cl
mov ch,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
jmp short s
ok: pop si
pop cx
ret
code ends
end start

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧