. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验4   第1小题 为什么我做的根本不能通过编译呢?  [待解决] 回复[ 10次 ]   点击[ 592次 ]  
cdzjf
[帖 主]   [ 发表时间:2009-01-12 17:42 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28
几经修改,那一行始终有错

assume cs:codesg

codesg segment

mov ax,20h
mov ds,ax
mov ax,0
mov cx,0
mov cx,3fh

s: mov [ax],bx(就这里过不了)
  inc ax
  inc bx
  loop s

mov ax,4c00h  
int 21h

codesg ends  

end

那一行是那里错了呢?我把bx的内容传送个ds:ax里面,ds是20H,ax是0就等于把bx的内容传送给了20:0单元内有错吗?
theguiking
[第1楼]   [ 回复时间:2009-01-12 18:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2008-12-16 19:25
[bx]代表的不是[寄存器]
[bx]代表的就是[bx],暂时来说只有bx寄存器支持这种当作偏移地址的引用

所以[ax]不是有效的
gsyangchao
[第2楼]   [ 回复时间:2009-01-25 13:20 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2009-01-25 01:37
bx初始设了没有。。。
gsyangchao
[第3楼]   [ 回复时间:2009-01-25 13:37 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2009-01-25 01:37
几经修改,那一行始终有错

assume cs:codesg

codesg segment

mov ax,20h
mov ds,ax
mov ax,0
mov cx,0
mov cx,3fh

s: mov [ax],bx(就这里过不了)
  inc ax
  inc bx
  loop s

mov ax,4c00h  
int 21h

codesg ends  

end

那一行是那里错了呢?我把bx的内容传送个ds:ax里面,ds是20H,ax是0就等于把bx的内容传送给了20:0单元内有错吗?
------------------
回复:1.为什么要mov cx,0  然后mov cx,3fh  是不是写错了,应该是mov bx,0 然后mov cx,3fh
      2.bx为16位寄存器,题目的意思是1个内存单元存1个数据,所以用8位的bl,不要用bx,虽然bx高位为0,下一个字单元的低8位可以将上一个字单元多出来的高8位覆盖,但是不符合题意。
maxm
[第4楼]   [ 回复时间:2009-01-29 15:06 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41
回复:[贴 主]
------------------
其他的现不说,mov cx,3fh 肯定错
应该写成 mov cx,40h ,64个数嘛~
maxm
[第5楼]   [ 回复时间:2009-01-29 15:10 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41
回复:[贴 主]
------------------
贴一个我写的:
assume cs:code 
code segment 
        mov ax,0020h
        mov ds,ax

        mov bx,0
        mov cx,40h

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

        mov ax,4c00h
        int 21h
code ends
end
linghulg
[第6楼]   [ 回复时间:2009-03-05 12:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-04 17:25
回复:[贴 主]
------------------
贴一个我写的:
assume cs:code 
code segment 
        mov ax,0020h
        mov ds,ax

        mov bx,0
        mov cx,40h

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

        mov ax,4c00h
        int 21h
code ends
end
------------------
回复:bx是十六位寄存器,mov ds:[bx],bx这一句应该改成mov [bx],bl,这样按字节逐个填进去才正好是64个。如果不改,那就是按字填进去,一次填两个字节。
455139
[第7楼]   [ 回复时间:2009-06-07 13:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-29 14:22
assume cs:a
a segment
start: mov ax,0020h
       mov ds,ax
       mov bx,0
       mov dx,0
       mov cx,63
       mov ax,0
xh:    mov dx,ax
       mov ds:[bx],dx
       inc ax
       inc bx
       loop xh
       mov ax,4c00h
       int 21h
a ends
end
我也来一个自己写的  呵呵
455139
[第8楼]   [ 回复时间:2009-06-07 13:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-29 14:22
assume cs:a
a segment
start: mov ax,0020h
       mov ds,ax
       mov bx,0
       mov dx,0
       mov cx,64
       mov ax,0
xh:    mov dx,ax
       mov ds:[bx],dx
       inc ax
       inc bx
       loop xh
       mov ax,4c00h
       int 21h
a ends
end
粘错了  ,这个才是对的,嘿嘿  不好意思啊!!!
microzyyz
[第9楼]   [ 回复时间:2009-06-25 11:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-06-09 13:56
以上几楼我不敢去说谁对谁错,可是下面的程序想应该是对的,
我在masm里面已经试过了,而且可以通过,希望大家指教!
assume cs:code
code segment
    mov ax,0020h
    mov ds,ax
    mov bx,0
    mov cx,64
  s:mov ds:[bx],bx
    inc bx
    loop s
    mov ax,4c00h
    int 21h
code ends
end
zkjiang
[第10楼]   [ 回复时间:2009-06-28 09:32 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-10 10:09
mov ax,0020h 
    mov ds,ax 
这个是什么意思?
为什么ds的值是0020h而不是0??
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved