注册 登录
编程论坛 汇编论坛

宏问题,请大家指教!(怎样调用内存中的数)

乖乖宝贝儿 发布于 2006-12-28 11:55, 1313 次点击

要求:使用重复汇编结构,在内存中建立0~9的立方值表,并编程将其存放到内存的另一个存储区域中。
问题是我不知道怎么把这个放到内存的另一个存储区域中!请大家指点!
data segment
irp num,<0,1,2,3,4,5,6,7,8,9>
dw num*num*num
endm
org 30h
result dw 10 dup(?)
data ends

code segment
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax
mov ah,4ch
int 21h
code ends
end begin

[此贴子已经被作者于2006-12-28 20:47:12编辑过]

23 回复
#2
乖乖宝贝儿2006-12-28 20:29
想了好久还是没找到办法!

怎么才能把内存中的数换一个区域呀?

而且那段还没有名字!

大家快帮帮我吧!!!
#3
菜鸟上路2006-12-29 19:10
name macro
......
......
endm
#4
乖乖宝贝儿2006-12-29 20:22
不明白

那怎么传过去呀

把已经定义的立方表 传送到另一个内存区域

麻烦说一下

谢谢
#5
菜鸟上路2006-12-29 20:27
把一个数据块传到另一个数据块可以用REP MOVSB指令,那你说的跟宏应该没什么关系吧
#6
乖乖宝贝儿2006-12-29 20:49

刚刚学习汇编

有很多东西自己想不出来

感觉和宏有些关系,用重复汇编了,而且里面又没有名字让我传送,所以自己就不知道了,REP指令没有用过

这样可以吗???

data segment
wo macro
irp num,<0,1,2,3,4,5,6,7,8,9>
dw num*num*num
endm
endm

org 30h
a dw 10 dup(?)
data ends

code segment
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax
mov cx,10
mov si,offset wo
mov di,offset a
lop movs a,wo
loop lop
mov ah,4ch
int 21h
code ends
end begin

#7
乖乖宝贝儿2006-12-29 20:51
但是编译不过去呀

愁死我了

#8
乖乖宝贝儿2006-12-29 21:01
以下是引用菜鸟上路在2006-12-29 20:27:48的发言:
把一个数据块传到另一个数据块可以用REP MOVSB指令,那你说的跟宏应该没什么关系吧

麻烦您把这个 REP MOVSB加到我的指令中可以吗??

#9
菜鸟上路2006-12-29 21:04

你的错的比较多
还是用REP MOVSB指令吧
相当于:
MOV CX,10
NEXT:
MOV ES:[DI],DS:[SI]
LOOP NEXT

#10
乖乖宝贝儿2006-12-29 21:49

下面的代码是正确的 就是没有实现数据的传送

我又试了一下,那REP MOVSB加进去就错误 也不知道哪里有错
应该怎么加进去呀 还是要麻烦您指导一下 谢谢了
data segment
irp num,<0,1,2,3,4,5,6,7,8,9>
dw num*num*num
endm
org 30h
result dw 10 dup(?)
data ends

code segment
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax
mov ah,4ch
int 21h
code ends
end begin

#11
菜鸟上路2006-12-29 23:01
我不知道IRP的用法
#12
乖乖宝贝儿2006-12-30 08:54
以下是引用菜鸟上路在2006-12-29 23:01:30的发言:
我不知道IRP的用法

结果还是宏问题呀!!


我也不知道

调用不出来!

#13
菜鸟上路2006-12-30 12:04
这里有些宏的介绍[URL=http://rjx.]http://rjx.[/URL]
#14
乖乖宝贝儿2006-12-30 15:19
看过了

但是里面没有介绍怎样把IRP定义的数取出来!!
#15
菜鸟上路2006-12-30 17:19
等等其他高手来看下吧,没接触过这方面的知识
#16
lefttime2006-12-30 18:01

唔 ,有些日子没上来啦
呵呵,是宏问题呀,嗯,我说说看吧:
IRP有些类似于REPT,都是重复性伪指令吧,但是IRP可带多参数,而REPT只是带上表达式
举个例子比较实际吧
通过IRP调用参数得有个中介吧,不然它可不会一个一个都调用,所以我们通常这样定义:
IRP A,<B,C...> ;当然这里的A,B,C可以任意取名,只要不和指令发生冲突
其中A就是个中介,它用来逐个调用尖括号中的参数(这里注意了,我们调用宏时写入的参数
实际上就是这里而的参数啦,必须得用<>括起来)B、C......
例如,实现输出三个A:

OUTPUT MACRO REGX
MOV AH,2 ;先定义调用2号中断,省得重复定义
IRP REG,<REGX> ;在这里REG就是个所谓的形参,用于逐个调用REGX
MOV DL,REG ;这里把REG获取的参数传给DL
INT 21H
ENDM ;因为这里重复汇编也属于一个宏体,所以必须加个结束标志
ENDM
CSEG SEGMENT
ASSUME CS:CSEG
MAIN: MOV AL,41H
MOV BL,AL
MOV CL,AL
OUTPUT <AL,BL,CL> ;这里注意了,在重复汇编时,参数得用<>括起来,且参数用逗号隔开
MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN

#17
菜鸟上路2006-12-30 18:18
学习了
#18
乖乖宝贝儿2006-12-30 20:40


[此贴子已经被作者于2006-12-31 16:15:07编辑过]

#19
乖乖宝贝儿2006-12-30 20:41

[此贴子已经被作者于2006-12-31 16:14:45编辑过]


#20
乖乖宝贝儿2006-12-30 21:12

[此贴子已经被作者于2006-12-31 16:12:35编辑过]

#21
乖乖宝贝儿2006-12-31 14:49

[此贴子已经被作者于2006-12-31 16:12:12编辑过]

#22
乖乖宝贝儿2006-12-31 15:41

[此贴子已经被作者于2006-12-31 16:14:09编辑过]

#23
乖乖宝贝儿2006-12-31 16:11

终于自己弄对了!!!我太高兴了!耶~~~~~~~~~~~~~~~!麻烦大家了!!!十分感谢你们提供的帮助!!1
data segment
bbb label word
irp num,<0,1,2,3,4,5,6,7,8,9>
dw num*num*num
endm
data ends
data1 segment
a dw 10 dup(?)
data1 ends

code segment
assume cs:code,ds:data,es:data1
begin:
mov ax,data
mov ds,ax
mov bx,data1
mov es,bx
mov cx,10
mov si,offset bbb[0]
mov di,offset a
rep movsw
mov ah,4ch
int 21h
code ends
end begin

#24
乖乖宝贝儿2006-12-31 16:16
谢谢
菜鸟上路 和 lefttime
1