鱼C论坛

 找回密码
 立即注册
查看: 2530|回复: 2

汇编语言那里错了

[复制链接]
发表于 2012-12-16 20:34:43 | 显示全部楼层 |阅读模式
1鱼币
  1. .386 ; 指令集
  2. .model flat,stdcall ; 工作模式
  3. option casemap:none ; 格式

  4. ; 数据段
  5. .data
  6. a db 'Hello, World !',0
  7. ; 代码段
  8. .code
  9. start:
  10. mov ax,offset a
  11. mov ds,ax
  12. mov ax,0b800h
  13. mov es,ax
  14. mov cx,14
  15. s:
  16. mov al,[si]
  17. mov es:[di],al
  18. inc si
  19. add di,2
  20. loop s
  21. end start ; 指定程序的入口
复制代码

0.asm(20) : error A2155: cannot use 16-bit register with a 32-bit address
0.asm(21) : error A2155: cannot use 16-bit register with a 32-bit address
0.asm(14) : error A2022: instruction operands must be the same size
怎么解决





小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-17 07:47:57 | 显示全部楼层
本帖最后由 s0512 于 2013-1-20 13:00 编辑

你用的是Flat 模式(32位地址),而报错那几行代码你使用的是SI、DI,把
它们改成ESI EDE,就可以解决了。
另~Falt模式使用的是32位地址空间,ES,DS这些16位段寄存器在保护模式下用法是不同的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-8-29 10:24:58 | 显示全部楼层
{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表