+ -
当前位置:首页 → 问答吧 → .....求助,一个王爽书上的汇编入门题目

.....求助,一个王爽书上的汇编入门题目

时间:2011-03-12

来源:互联网

调试了很久,不知道逻辑上哪里有问题

题目是:将第一段数据和第二段数据逐个相加并依次存进第C段中
Assembly code
assume cs:code
a segment
    db 1,2,3,4,5,6,7,8
a ends
b segment
    db 1,2,3,4,5,6,7,8
b ends
c segment
    db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov ax,0
mov bx,0
mov cx,8

s:add al,cs:[bx]
  add al,cs:[bx+16]
  mov cs:[bx+32],al
  inc bx
  loop s
mov ax,4c00h
int 21h
code ends
end start




mov ax,0
mov bx,0
mov cx,8

s:add al,cs:[bx]
  add al,cs:[bx+16]
  mov cs:[bx+32],al
  inc bx
  loop s
mov ax,4c00h
int 21h

这段是空的,我自己填上去的

作者: A328240784   发布时间: 2011-03-12

assume cs:code

 

a segment

  db 1,2,3,4,5,6,7,8

a ends

 

b segment

  db 1,2,3,4,5,6,7,8

b ends

 

c segment

  db 0,0,0,0,0,0,0,0

c ends

 

code segment

  start:
;*******************************************
mov ax,a

  mov es,ax

  mov ax,c ;注意这几句的作用 书上应该有写 关于数据,指令,栈等的地址问题

  mov ds,ax

  mov bx,0
;**********************************************
  mov cx,8

 

  s1:mov ax,es:[bx]

  add [bx],ax

  add bx,2

  loop s1

 

  mov ax,b

  mov es,ax

  mov ds,ax

  mov bx,0

  mov cx,8

 

  s2:mov ax,es:[bx]

  add [bx],ax

  add bx,2

  loop s2

 

  mov ax,4c00h

  int 21h

code ends

  end start

作者: angel_kong   发布时间: 2011-03-12

数据段里定义的是字节,三个段相差是8个字节而不是16个字节。
C/C++ code

    mov ax,a
    mov ds,ax
    mov ax,0
    mov bx,0
    mov cx,8
s:
    mov al,[bx]
    add al,[bx+8]
    mov byte ptr [bx+16],al
    inc bx
    loop s

作者: masmaster   发布时间: 2011-03-12

引用楼主 a328240784 的回复:
调试了很久,不知道逻辑上哪里有问题

题目是:将第一段数据和第二段数据逐个相加并依次存进第C段中
Assembly code
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c end……


你写的其中 开头就有 cs:code..说明寄存器cs用做储存程序的段地址..你没用定义数据区的地址咋表示~

作者: angel_kong   发布时间: 2011-03-12

引用 2 楼 masmaster 的回复:
数据段里定义的是字节,三个段相差是8个字节而不是16个字节。
C/C++ code

mov ax,a
mov ds,ax
mov ax,0
mov bx,0
mov cx,8
s:
mov al,[bx]
add al,[bx+8]
mov byte ptr [bx+16],al
inc bx
……
它不是一个段一个段的吗,比如这个段段地址为X,占据了3个字节,那么整个段占得空间就是16字节,第二段又从X+1开始。

作者: A328240784   发布时间: 2011-03-12

引用 1 楼 angel_kong 的回复:
assume cs:code



a segment

db 1,2,3,4,5,6,7,8

a ends



b segment

db 1,2,3,4,5,6,7,8

b ends



c segment

db 0,0,0,0,0,0,0,0

c ends



cod……
书上写的最前面的伪代码有类似于ds:a ss:b这些的,这里没有也能用?另外我的代码哪里错了,我不觉得是2L的问题

作者: A328240784   发布时间: 2011-03-12

引用 3 楼 angel_kong 的回复:
引用楼主 a328240784 的回复:
调试了很久,不知道逻辑上哪里有问题

题目是:将第一段数据和第二段数据逐个相加并依次存进第C段中
Assembly code
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0……
书上题目是这样的,我也是千百个不愿意啊= =

作者: A328240784   发布时间: 2011-03-12

引用 4 楼 a328240784 的回复:
引用 2 楼 masmaster 的回复:
数据段里定义的是字节,三个段相差是8个字节而不是16个字节。
C/C++ code

mov ax,a
mov ds,ax
mov ax,0
mov bx,0
mov cx,8
s:
mov al,[bx]
add al,[bx+8]
mov byte ptr [bx+16],al
inc bx
……
它不是一个段一个段的吗……

abc三个连续的段, 你可以看做一个整体的段呀!

作者: masmaster   发布时间: 2011-03-12