【问题标题】:Assembly calculator (sub & addition) with functions and arrays带有函数和数组的汇编计算器(子和加法)
【发布时间】:2017-06-03 11:26:23
【问题描述】:

所以我必须做一个基本的计算器(我明天要考试)但我卡住了。 我得到第一个 num 到数组,动作(+ OR - ),然后第二个数字也到数组(数字必须是 1-4 位)。 我如何从数组中取出每个数字并将其转换为完整数字(转换为二进制),执行数学运算并将答案转换为十六进制并打印出来? 它必须使用单独的函数来完成,并且只有当用户键入 0 时出现输入第一个 num 的消息时,程序才会结束。 这是我的代码,希望您理解我的问题和代码(在互联网上找不到与我正在寻找的类似的东西)。 谢谢:)

data segment                                   
entr_first db 'Please enter first num 1-4 digits:',0ah,0dh,'$'
select_op db 'Please enter operation type + or -:',0ah,0dh,'$'
entr_sec db 'Please enter second num 1-4 digits:',0ah,0dh,'$'
ans db 'Your answer is: $'
num1 db 7 dup('5')
num2 db 7 dup('5')
answer db 8 dup('6')
opr db 1 dup('0')
data ends
sseg segment stack
sseg ends
code segment
assume cs:code,ds:data,ss:sseg
main:   mov ax,data
        mov ds,ax
        call kelet1
        call revah
        call keletOpr
        call revah
        call kelet2
        call dollar
        int 21h
        mov ax,4c00h
        int 21h
dollar:
        mov cx,0
        mov si,0
        mov cl,num1[si+1]
        add si,cx
        add si,2
        mov num1[si],'$'
        mov cx,0
        mov si,0
        mov cl,num1[si+1]
        add si,cx
        add si,2
        mov num2[si],'$'
        ret
revah:  mov ah,2
        mov dl,13
        int 21h
        mov dl,10
        int 21h
        ret
kelet1: mov dx,offset entr_first
        mov ah,9
        int 21h
        mov dx,offset num1
        mov ah,10
        int 21h
        ret
keletOpr:mov dx,offset select_op
         mov ah,9
         int 21h
         mov ah,1
         int 21h
         mov opr[0],al
         ret
kelet2: mov dx,offset entr_sec
        mov ah,9
        int 21h
        mov dx,offset num2
        mov ah,10
        int 21h
        ret
        code ends
        end main

【问题讨论】:

  • 即使 SO 也充满了用于将字符串转换为数字的样本...还要更具体地说明是什么导致了你的问题,你需要一个算法还是你坚持实现它?如果有,具体在哪里? PS:评论您的代码,特别是如果您希望其他人提供帮助。如果这是一项学校作业,请重新查看您的学习材料并咨询您的老师。

标签: assembly binary hex calculator x86-16


【解决方案1】:
    mov dx,offset num1
    mov ah,10
    int 21h

这是错误的,int 21h 的服务ah=0Ah 需要不同的数据结构,请参阅documentation

当然,第二个字符串的输入也是错误的。

然后在call kelet2 之后代码不再有意义。

int 21h,ah=4Ch 退出呼叫除外)。

我认为从这个起点开始,您在 1 天内无法通过任何组装考试。所以我们希望考试不是关于装配的。

我认为经过 2-3 周的强化学习(每天 8-12 小时)+编程,您可以达到“新手”水平,这可能足以通过。

那么你到底在问什么?该站点既不是“为我编写代码”服务,也不是“免费的大会讲座”(尽管在有限 的意义上,我倾向于在这里完全这样做)。然而,我无法在一个答案中提供半年的努力。

也许您应该将考试推迟到夏季,然后每个周末花 4-6 小时学习您的装配知识。

【讨论】:

  • 我正在学习汇编一年了,我在代码中编写的所有内容都是我们所学到的,并且被告知要这样写
  • @ValerNaamaKuznetsov:嗯,该说什么... 1)我看不到“解决”你“明天”考试的方法 2)一年之后 => 出了点问题..要么是你的讲师,要么是你的努力,要么是你的学习方式,要么是这些的任意组合。 3)如果您的评论是“但是我想要”,并且您会努力工作几个星期,那么我可能会尝试通过给您讲课来提供帮助,但这非常耗时,所以请先确保你的奉献精神取决于它,你真的想知道在汇编中编程。如果我按我的正常费率(我不)对我的时间征税,那么这样的课程将像你的整个 edu 账单一样花费。
猜你喜欢
  • 2020-08-25
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多