. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  各位帮忙看看   实验4 [BX]和LOOP的使用 第一题, 对不对?  [待解决] 回复[ 10次 ]   点击[ 722次 ]  
wujie6533213
[帖 主]   [ 发表时间:2010-01-03 19:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-24 09:39
题目: 编程,向内存0:200-0:23f一次传送数据0~63(3fh)

我的回答

assume cs:date
date segment
   mov ax,200h
   mov ds,ax

   mov bx,0

   mov cx,64

s: mov [bx],bl
   inc bx
   loop s

   mov ax,4c00h
   int 21h

date ends
end
regex
[第1楼]   [ 回复时间:2010-01-03 22:22 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
debug一下, 不就知道啦~~~
PS:文件头两行, 最后这样写好点吧
assume cs:code
code   segment
wtan
[第2楼]   [ 回复时间:2010-01-05 19:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-03 08:56
我觉得是可以的,而且写得很好
zwdnet
[第3楼]   [ 回复时间:2010-01-07 18:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-26 14:14
借问一下,我把楼主的程序改了,就是交换了一下ax和bx的位置,结果汇编时出错
程序如下:
assume cs:code
code segment
         mov ax, 0
         mov cx, 64
         mov bx, 200h
         mov ds, bx
      s: mov [ax], al
         inc ax
         loop s

         mov 4c00h
         int 21
code ends
end 

用masm5.1在虚拟机下的纯Dos环境里汇编结果如下:
sy4gb.asm(8):error A2048: Must be index or base register
  51678 + 417586 Bytes symbol space  free
          0 Warning Errors
          1 Severe    Errors

请问向ds里传数据必须用ax寄存器吗,用bx不行?谢谢!
zwdnet
[第4楼]   [ 回复时间:2010-01-07 18:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-26 14:14
sorry, masm版本是5.0
regex
[第5楼]   [ 回复时间:2010-01-07 18:21 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
第一。BX是一个寻址寄存器,也是一个通用寄存器, 但是如果这样用[BX]的时候, 其他三种寄存器就不具备寻址的作用了。就跟AX一样, 他具有累加功能, 故也成之为累加器。CX叫计数器, 各有各的功能吧
第二,你文件倒数第三行第四行输入有误。
笨人初学, 还望高手指点。
regex
[第6楼]   [ 回复时间:2010-01-07 19:19 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
向DS里传送数据AXBXCXDX都可以, 但是只有[BX]可以将SA:EA处的数据传送给目标寄存器。 
用debug实验啦, 只有BX可以
zwdnet
[第7楼]   [ 回复时间:2010-01-07 21:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-26 14:14
谢谢regex!原来四个通用寄存器不是完全一样的。多谢了!
csusuntao
[第8楼]   [ 回复时间:2010-01-25 21:29 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:2
注册日期:2010-01-04 23:00
很感谢regex的讲解,我也很纳闷为什么只有bx可以,多谢啦。
另外,弱弱的问一句3楼,纯dos虚拟环境怎么玩?
okbb
[第9楼]   [ 回复时间:2010-01-31 18:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-23 17:53
楼上真强,我只会 最菜鸟的写法,

assume cs:code
code segment
mov ax,0
mov ds,ax
mov bx,200h
mov cx,64
mov dl,0
s:mov ds:[bx],dl
  inc bx  自变的地址
  inc dl  自变的数
  loop s
  mov ax,4c00h
  int 21h
  code ends
  end
一个自变的数,放到一个自变的地址中。我用了dl,跟bx,没想到用bl,其实bx自变,跟着bl也变,哎,多此一举。。
regex
[第10楼]   [ 回复时间:2010-02-01 00:34 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.

D:\ASM>debug
-a
146D:0100 mov ax,0
146D:0103 mov ds,ax
146D:0105 mov bx,200
146D:0108 mov al,0
146D:010A mov cx,40
146D:010D mov [bx],al
146D:010F inc al
146D:0111 inc bx
146D:0112 loop 10d
146D:0114
-d 0:200 23f
0000:0200  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:0210  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:0220  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0000:0230  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-g 114

AX=0040  BX=0240  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0000  ES=146D  SS=146D  CS=146D  IP=0114   NV UP EI PL NZ AC PO NC
146D:0114 9A007511E8    CALL    E811:7500
-d ds:200 23f
0000:0200  00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F   ................
0000:0210  10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F   ................
0000:0220  20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
0000:0230  30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?
-q

D:\ASM>
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved