Assembly 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

我首先想问的是,Stackoverflow是一个合适的地方来找到关于AS88汇编语言的答案吗?如果没有,有人能告诉我去一个更有益的地方吗

我将发布我的问题,以防万一:

我必须编辑以下源代码,以便它在内部生成计算中跳过前两对向量数。我不确定这意味着什么,这是我的代码,如果有人能解释或帮助我回答这个问题,我将不胜感激

! 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