. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9 求救  [待解决] 回复[ 6次 ]   点击[ 614次 ]  
heshen75
[帖 主]   [ 发表时间:2007-11-26 17:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-09-29 20:49
assume cs:code
data segment
db 'welcome to masm!'
data ends
code segment
start:mov ax,data
      mov ds,ax
      mov ss,0b800h
      mov bp,0870
      mov bx,0
      mov cx,16
    s:mov ax,[bx]
      mov [bp],ax
      mov byte ptr [bp+1],02h
      inc bx
      add bp,2
      loop s
      mov ax,4c00h
      int 21h
      code ends
      end start
我觉得我写的程序没有错,但连接和编译不过去,请高手指教
fishboy
[第1楼]   [ 回复时间:2007-11-26 20:42 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
编译过不去就说明指令格式不正确。这个是写程序的基础,必须保证的。从头看书吧,知识不能马虎!
1)
mov ss,0b800h ==》段寄存器不能直接放入数据必须用其他通用寄存器来转一下:mov ax,0B800H mov ss,ax
2)
mov ax,[bx] 
mov [bp],ax
应该为
mov al,[bx] 
mov [bp],al
你定义的数据是db型的,你一次只取一个数据,你得用一个8位的寄存器,你用16位的会一次取一个dw型,那你的程序结果绝对不会正确。
3)
bp使用是和ss配套,但是,你要知到ss是栈的段地址,你轻易的使用做一个数据地址,容易造成错误。建议使用其他的,例如es,在寻址的时候在显示的给出段地址es,如es:[bp].我觉得使用默认值不是不可以,但是,不是一个好的编程习惯。式代码的可读性降低。个人不建议使用默认的形式,省略了打两个字母的时间,可能造成你更长时间的困惑。
建议楼主将知识学的扎实一点。
heshen75
[第2楼]   [ 回复时间:2007-11-26 20:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-09-29 20:49
谢谢,我以后会认真并把知识学的扎实一些,谢谢您的建议
heshen75
[第3楼]   [ 回复时间:2007-11-26 21:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-09-29 20:49
实验9我已编译通过,但我觉得它好象有点繁锁,请高手看一看
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start:mov ax,data
      mov ds,ax
      mov ax,0b800h
      mov es,ax
      mov bp,06e0h
      mov bx,0
      mov cx,16
    s0:mov al,[bx]
      mov es:[bp],al
      mov byte ptr es:[bp+1],02h
      inc bx
      add bp,2
      loop s0
      mov bp,0780h
      mov bx,0
      mov cx,16
   s1:mov al,[bx]
      mov es:[bp],al
      mov byte ptr es:[bp+1],24h
      inc bx
      add bp,2
      loop s1
      mov bp,0820h
      mov bx,0
      mov cx,16
   s2:mov al,[bx]
      mov es:[bp],al
      mov byte ptr es:[bp+1],71h
      inc bx
      add bp,2
      loop s2
      mov ax,4c00h
      int 21h
     code ends
     end start
zysong
[第4楼]   [ 回复时间:2007-11-29 17:00 ]   [引用]   [回复]   [ top ] 
荣誉值:19
信誉值:0
注册日期:2007-07-05 17:25
assume cs:code
data segment
  db 'welcome to masm!'
data ends
code segment
start:mov ax,data
      mov ds,ax
      mov ax,0b800h
      mov es,ax
      mov bx,160*12+36*2
      mov si,0
      mov cx,16
   s: mov al,[si]
      mov es:[bx],al
      mov byte ptr es:[bx+1],11000010b
      mov es:[bx+160],al
      mov byte ptr es:[bx+160+1],00000010b
      mov es:[bx+160*2],al
      mov byte ptr es:[bx+160*2+1],00000001b
      add bx,2
      inc si
      loop s
      mov ax,4c00h
      int 21h
code ends
end start
advanceking
[第5楼]   [ 回复时间:2008-02-08 01:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-01-30 19:09
assume cs:code 

data segment
  db 'welcome to masm!'
  db 02h,24h,71h
data ends

code segment
  start:mov ax,data
        mov ds,ax
        mov ax,0b800h
        mov es,ax
        sub di,di
        sub si,si
        sub ax,ax
        mov cx,16
     s0:mov al,[si]
        mov es:[720h+di+0],al
        mov es:[720h+di+160],al
        mov es:[720h+di+320],al        
        inc si
        add di,2
        loop s0
        mov si,16
        mov di,1
        mov cx,16
     s1:mov al,[si+0]
        mov es:[720h+di+0],al
        mov al,[si+1]
        mov es:[720h+di+160],al
        mov al,[si+2]
        mov es:[720h+di+320],al
        add di,2
        loop s1
        mov ax,4c00h
        int 21h
code ends
end start
foreverwhy15
[第6楼]   [ 回复时间:2008-03-08 17:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-05 16:09
assume cs:codes, ds:datas
        datas segment
                db 'welcome to masm!'
        datas ends
        codes segment
                start:        mov ax,datas
                                mov ds,ax
                                mov ax,0b800h
                                mov es,ax
                                mov bx,160*12
                                mov si,0040h
                                mov di,0
                                
                                mov cx,16
                                s:        mov al,ds:[di]
                                        mov byte ptr es:[bx+si],al
                                        mov byte ptr es:[bx+si+1],11000010b
                                        add si,2
                                        inc di
                                        loop s
                                mov ax,4c00h
                                int 21h
        codes ends
        
end star
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved