鱼C论坛

 找回密码
 立即注册
查看: 2854|回复: 10

[已解决]书上第158页 问题7.9

[复制链接]
发表于 2018-9-17 13:16:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. assume cs:codesg,ds:datasg,ss:stacksg

  2. datasg segment
  3.         db '1. display      '
  4.         db '2. brows        '
  5.         db '3. replace      '
  6.         db '4. modify       '
  7. datasg ends

  8. stacksg segment
  9.         dw 10 dup(0)
  10. stacksg ends

  11. codesg segment
  12. start:
  13.                 mov ax,datasg
  14.                 mov ds,ax
  15.                 mov ax,stacksg
  16.                 mov ss,ax
  17.                 mov sp,20H
  18.                
  19.                 mov bx,0
  20.                 mov cx,4
  21.         s1: mov si,0
  22.                 push cx
  23.                 mov cx,4
  24.                 mov ah,0
  25.         s2: mov al,byte ptr[bx+3+si];为什么一定要加byte ptr,不是可以根据寄存器判断处理的长度吗
  26.                 and al,11011111b
  27.                 mov byte ptr[bx+3+si],al
  28.                 inc si
  29.                 loop s2
  30.                
  31.                 pop cx
  32.                 add bx,16
  33.                 loop s1
  34.                
  35.                 mov ax,4c00h
  36.                 int 21h
  37.                
  38. codesg ends
  39. end start
复制代码


问题在上面的注释中,为什么一定要在mov al,[bx+3+si]这条语句前面加上byte ptr来指明这是一个字节型数据,不然就会报错A2070
最佳答案
2018-9-17 14:50:58
甲鱼零基础汇编,39集,12:49,针对立即数的修饰
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-17 13:36:26 From FishC Mobile | 显示全部楼层
主要是立即数 3,要说明
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 14:04:27 | 显示全部楼层
  1. mov        al, [bx + si + 3]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 14:14:32 | 显示全部楼层

常数不是放那里都可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 14:15:13 | 显示全部楼层
claws0n 发表于 2018-9-17 13:36
主要是立即数 3,要说明

可以这样使用吧,我记得
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 14:17:24 | 显示全部楼层
20180906 发表于 2018-9-17 14:14
常数不是放那里都可以吗

立即数放在后面
mov 寄存器, [寄存器 + 寄存器 + 立即数]

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 14:25:16 | 显示全部楼层
人造人 发表于 2018-9-17 14:17
立即数放在后面
mov 寄存器, [寄存器 + 寄存器 + 立即数]

应该不是这个问题吧,我在书上第151页倒数第三行看见了我这种用法,
  1. mov bc,[bx+2+di]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 14:26:30 | 显示全部楼层
人造人 发表于 2018-9-17 14:17
立即数放在后面
mov 寄存器, [寄存器 + 寄存器 + 立即数]

而且我另外一个帖子,就是实验七这样写也没有报错,只是运行不出来,大佬能不能一并帮我看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 14:27:25 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-9-17 14:17
立即数放在后面
mov 寄存器, [寄存器 + 寄存器 + 立即数]

都可以吧,最后也会得到累加后的偏移地址
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 14:50:58 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
甲鱼零基础汇编,39集,12:49,针对立即数的修饰
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 15:19:29 | 显示全部楼层
已经解决了,我发现如果是mov 寄存器,[bx+idata+si],后面[]中的内容顺序可以是随意的(我记得小甲鱼讲过,我笔记上有)。主要问题在于前面的寄存器只能是ax或者bx这样的通用寄存器。
其实这一点小甲鱼视频里面也有说到(提了一下),还是看视频的时候没太注意。刚刚又去看了一遍,就听到了,实验了之后发现应该是这个问题。你们可以自己试试哈。
谢谢大家帮忙!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 12:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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