首页 > 解决方案 > 将两个大于 10 的数字相加

问题描述

我正在尝试将两个一位数相加,但是当答案大于 10 时,它会给我一个错误“<”(不确定这意味着什么),如果答案低于 10,则它可以正常工作,例如 4 3 = 7。我已经浏览了我的代码,但我找不到任何错误,是我忘记添加的东西吗?任何帮助都会得到帮助:)!

汇编代码:

; Konstanter
  cr equ 13 ; Vognretur
  lf equ 10 ; Linjeskift
  SYS_EXIT  equ 1
  SYS_READ  equ 3
  SYS_WRITE equ 4
  STDIN     equ 0
  STDOUT    equ 1
  STDERR    equ 2

; Datasegment
section .bss
  siffer resb 4
  
; Datasegment
section .data
  meld db "Skriv to ensifrede tall skilt med mellomrom.",cr,lf
    db "Summen av tallene maa vaere mindre enn 10.",cr,lf
  meldlen equ $ - meld
  feilmeld db cr,lf, "Skriv kun sifre!",cr,lf
  feillen equ $ - feilmeld
  crlf db cr,lf
  crlflen equ $ - crlf
  
; Kodesegment med program
section .text

global _start
_start:
  mov edx,meldlen
  mov ecx,meld
  mov ebx,STDOUT
  mov eax,SYS_WRITE
  int 80h
  
  call lessiffer
  cmp edx,0 
  jne Slutt 
  mov eax,ecx 
  
  call lessiffer
  ; vellykket: edx=0, tall i ecx
  cmp edx,0 
  jne Slutt
  mov ebx,ecx 
  
  call nylinje
  add eax,ebx
  mov ecx,eax
  call skrivsiffer 
  
Slutt:
  mov eax,SYS_EXIT
  mov ebx,0
  int 80h

; ---------------------------------------------------------
skrivsiffer:
  ; Skriver ut sifferet lagret i ecx. Ingen sjekk på verdiområde.
  push eax
  push ebx
  push ecx
  push edx
  add ecx,'0'
  mov [siffer],ecx
  mov ecx,siffer
  mov edx,1
  mov ebx,STDOUT
  mov eax,SYS_WRITE
  int 80h
  pop edx
  pop ecx
  pop ebx
  pop eax
  ret
  
; ---------------------------------------------------------
lessiffer:
  push eax
  push ebx
  
Lokke:
  ; Leser et tegn fra tastaturet
  mov eax,SYS_READ
  mov ebx,STDIN
  mov ecx,siffer
  mov edx,1
  int 80h
  mov ecx,[siffer]
  cmp ecx,' '
  je Lokke
  cmp ecx,'0'
  jb Feil
  cmp ecx,'18'
  ja Feil
  sub ecx,'0'
  mov edx,0 
  pop ebx
  pop eax
  ret 
  
Feil:
  mov edx,feillen
  mov ecx,feilmeld
  mov ebx,STDERR
  mov eax,SYS_WRITE
  int 80h
  mov edx,1 
  pop ebx
  pop eax
  ret 
  
; ---------------------------------------------------------
; Flytt cursor helt til venstre på neste linje
nylinje:
  push eax
  push ebx
  push ecx
  push edx
  mov edx,crlflen
  mov ecx,crlf
  mov ebx,STDOUT
  mov eax,SYS_WRITE
  int 80h
  pop edx
  pop ecx
  pop ebx
  pop eax
  ret
  
; End _start

标签: linuxassemblyx86decimalnasm

解决方案


推荐阅读