Assembly AS88汇编语言源文件编辑
我首先想问的是,Stackoverflow是一个合适的地方来找到关于AS88汇编语言的答案吗?如果没有,有人能告诉我去一个更有益的地方吗 我将发布我的问题,以防万一: 我必须编辑以下源代码,以便它在内部生成计算中跳过前两对向量数。我不确定这意味着什么,这是我的代码,如果有人能解释或帮助我回答这个问题,我将不胜感激Assembly AS88汇编语言源文件编辑,assembly,x86-16,as88,Assembly,X86 16,As88,我首先想问的是,Stackoverflow是一个合适的地方来找到关于AS88汇编语言的答案吗?如果没有,有人能告诉我去一个更有益的地方吗 我将发布我的问题,以防万一: 我必须编辑以下源代码,以便它在内部生成计算中跳过前两对向量数。我不确定这意味着什么,这是我的代码,如果有人能解释或帮助我回答这个问题,我将不胜感激 ! This program multiplies two vectors ! It shows a subroutine with arguments and ! a local v
! This program multiplies two vectors
! It shows a subroutine with arguments and
! a local variable. See section 9.8.3.
_EXIT = 1 ! 1
_PRINTF = 127 ! 2
.SECT .TEXT ! 3
inpstart: ! 4
MOV BP,SP ! 5
PUSH vec2 ! 6
PUSH vec1 ! 7
MOV CX,vec2-vec1 ! 8
SHR CX,1 ! 9
PUSH CX ! 10
CALL vecmul ! 11
MOV (inprod),AX ! 12
PUSH AX ! 13
PUSH pfmt ! 14
PUSH _PRINTF ! 15
SYS ! 16
ADD SP,12 ! 17
PUSH 0 ! 18
PUSH _EXIT ! 19
SYS ! 20
vecmul: ! 21
PUSH BP ! 22
MOV BP,SP ! 23
MOV CX,4(BP) ! 24
MOV SI,6(BP) ! 25
MOV DI,8(BP) ! 26
PUSH 0 ! 27
1: LODS ! 28
MUL (DI) ! 29
ADD -2(BP),AX ! 30
ADD DI,2 ! 31
LOOP 1b ! 32
POP AX ! 33
POP BP ! 34
RET ! 35
.SECT .DATA ! 36
pfmt: .ASCIZ "The in product is %d!\nThe sum is !"! 37
.ALIGN 2 ! 38
vec1: .WORD 3,4,7,11,3 ! 39
vec2: .WORD 2,6,3,1,0 ! 40
.SECT .BSS ! 41
inprod: .SPACE 2 ! 42
您当前的代码采用两个向量,并计算它们的乘积
vec1: [ 3, 4, 7, 11, 3]
vec2: [ 2, 6, 3, 1, 0]
result = 3*2 + 4*6 + 7*3 + 11*1 + 3*0 = 62
(您敢通过运行当前代码进行验证吗?)
因此:
它跳过前两对向量数
我会理解这个计算(对于相同的向量):
跳过了3*2
和4*6
对
您可以通过将vecmul
子例程调整为某些vecmul\u 2pairskip
子例程来修改当前代码,该子例程将采用与当前相同的参数
然后您可以检查向量的大小是否为3+(即
子cx,2
并在cx时返回0结果。您可以向“代码审阅”询问问题)Community@Coding4Fun:这不是代码审查问题。他们问的是如何对此代码进行特殊修改。您是否使用as88学习课程?@FareenC如果您在那里发帖,请确保您的问题针对该网站-也就是说,您维护的是工作代码。@Coding4Fun:您必须是软件工程新手,可能还没有阅读关于代码复查堆栈交换的提问标准。代码复查的目的不是将代码更改为具有不同功能的其他代码。复查是获取现有代码并查找bug,或者查找im改进(性能;代码质量;满足编码标准等)。此问题与代码检查堆栈交换无关,因为此代码当前不执行OP所需的操作。不严格要求进行更改,但当前循环非常糟糕。它在堆栈上使用累加器!但BX是免费的。另一种选择是在内存中保留一个结束指针,以便循环终止条件为cmp si[bp-2]
/jb
,所以内存操作数是只读的。我怎样才能创建一个全局变量之类的东西,或者为了把所有的数字加在一起?比如在这种情况下,我会得到40,并将其与产品消息一起打印出来?这会在vecmul部分吗?@farenc你不理解你发布的代码吗ed,我想是吧?如果你不知道如何编写代码,那就雇佣一个程序员。或者干脆不做你不能完成的任务。如果这是学校的任务,那么你很可能理解这些代码,所以买一些关于汇编的书,你的讲座信息等等……然后花几个月的时间和他们在一起。然后回到这个代码。(当前代码使用“全局”inprod
存储结果,在vecmul
中,它不使用任何全局,只使用本地堆栈内存)。
result = 7*3 + 11*1 + 3*0 = 32