鱼C论坛

 找回密码
 立即注册
查看: 1878|回复: 4

调试7.9习题中的一个问题

[复制链接]
发表于 2013-9-19 16:41:34 | 显示全部楼层 |阅读模式
5鱼币
最近在跟着小甲鱼视频 自学汇编
书后问题7.9
我写的代码如下
  1. assume cs:code,ds:data,ss:stack
  2.         stack segment
  3.                 dw 0,0,0,0,0,0,0,0
  4.         stack ends
  5.        
  6.         data segment
  7.                 db '1. display      '
  8.                 db '2. brows        '
  9.                 db '3. replace      '
  10.                 db '4. modify       '
  11.         data ends
  12.        
  13.         code segment
  14.         start:       
  15.                        
  16.                         mov ax ,data
  17.                         mov ds ,ax
  18.                        
  19.                         mov ax ,stack
  20.                         mov ss ,ax
  21.                         mov sp ,16
  22.                        
  23.                         mov bx ,0
  24.                         mov cx ,4                ;定义循环的行,控制行
  25.                 s:        push cx                ;把CX的值暂时压入栈中
  26.                         mov si ,0
  27.                         mov cx ,4                ;定义循环的列,控制列
  28.                         s0:        mov al ,[bx+3+si]                ;masm 报错
  29.                                 and al ,11011111b
  30.                                 mov [bx+3+si] ,al                ;masm 报错
  31.                                 add si ,1
  32.                                 loop s0
  33.                         add bx ,16
  34.                         pop cx                ;取回CX值,出栈
  35.                 loop s
  36.                        
  37.                 mov ax ,4c00h
  38.                 int 21h                               
  39.         code ends
  40. end start
复制代码
为什么al就报错,换成ax就能运行 ,麻烦高手指点下

最佳答案

查看完整内容

我把你的代码复制下来,编译了一下提示 error A2070: invalid instruction operands 也是在你所说的出错行。 我上网查了一下,这句话的意思是无效指令参数,我想,那个操作数无效? 你写的是,好像是这种写法不正确把,我换成了 就编译通过了。所以,我猜测应该只能用这种方式寻址吧,连顺序都不能颠倒的。。。。{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-19 16:41:35 | 显示全部楼层
我把你的代码复制下来,编译了一下提示
error A2070: invalid instruction operands
也是在你所说的出错行。
我上网查了一下,这句话的意思是无效指令参数,我想,那个操作数无效?
你写的是[bx+3+si],好像是这种写法不正确把,我换成了 [bx+si+3]就编译通过了。所以,我猜测应该只能用[bx+si+idata]这种方式寻址吧,连顺序都不能颠倒的。。。。{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-19 17:40:14 | 显示全部楼层

或者加入 byte ptr 也可通过编译,也可能是编译器规则问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-20 01:32:52 | 显示全部楼层
基本规则要牢记 刚开始都这样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-20 10:02:21 | 显示全部楼层
LinuxDeepin 发表于 2013-9-19 17:40
或者加入 byte ptr 也可通过编译,也可能是编译器规则问题!

感谢帮助,其实我也觉得是编译器规则问题,我用的是masm6版本,上面那哥们写了那么多我于心不忍,但只能评价一个最佳答案,所以,不好意思了哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 19:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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