用汇编语言计算a^2 - 3b

问题描述 投票:0回答:1

我正在学习一些汇编语言。我找到了要解决的问题

a^2-3b
其中 a>=0 且 b<=100.

我最初的算法是:

mov bl 3b 
mov cl a 
sub cl, bl 
mov dl 

这是我所能得到的。我对 c 的 ASCII 代码以及为 a 和 b 输入的数字感到困惑。我也无法得到 a^2 的东西。所以代码是这样的:

INCLUDE 'EMU8086.INC'

.MODEL SMALL
.STACK 100H
.DATA
    MSG DB "ENTER 1ST DECIMAL NUMBER: ", 0
    
.CODE
    MOV AX, @DATA
    MOV DS, AX
    
    LEA SI, MSG
    CALL PRINT_STRING
    
    CALL SCAN_NUM     ;CX
    MOV AX,CX         ;1ST INPUT IN AX
    
    CALL PTHIS
    DB 0AH, 0DH, "ENTER 2ND DECIMAL NUMBER: ", 0
    
    CALL SCAN_NUM     ;2ND INPUT IN CX
    
    SUB AX, CX
    
    CALL PTHIS
    DB 0AH, 0DH, 0
    
    ;MOV AX, CX
    CALL PRINT_NUM    ;AX
    
    EXIT:
    MOV AH, 4CH
    INT 21H

;.............DEFINE PROCEDURES..........;

DEFINE_PRINT_STRING 
DEFINE_PTHIS
DEFINE_GET_STRING
DEFINE_CLEAR_SCREEN
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS

谁能告诉我如何得到正方形

a^2
或者任何人都可以通过简单地告诉
a^2-3b
的解决方案来解决它?

assembly expression x86-16 emu8086
1个回答
0
投票

...要解决的问题

a^2-3b
,其中
a>=0
b<=100

约束

a>=0
b<=100
没有告诉任何有关数字是 signedunsigned 的信息。


有符号数字(16 位)范围从 -32768 到 32767,但应用约束
a 范围从 0 到 32767
b 范围从 -32768 到 100

  mov  ax, 3
  mov  bx, [b]
  imul bx       ; -> DX:AX is 3b == [-98301,300]

  mov  bx, ax
  mov  cx, dx   ; -> CX:BX is 3b == [-98301,300]

  mov  ax, [a]
  imul ax       ; -> DX:AX is a^2 == [0,1073676289]

  sub  ax, bx
  sbb  dx, cx   ; -> DX:AX is a^2-3b == [-300,1073774590]

有符号双字整数范围从 -2147483648 到 2147483647。


无符号数字(16 位)范围从 0 到 65535,但应用约束
a 范围从 0 到 65535
b 范围从 0 到 100

  mov  ax, 3
  mov  bx, [b]
  mul  bx       ; -> DX:AX is 3b == [0,300]

  mov  bx, ax
  mov  cx, dx   ; -> CX:BX is 3b == [0,300]

  mov  ax, [a]
  mul  ax       ; -> DX:AX is a^2 == [0,4294836225]

  sub  ax, bx
  sbb  dx, cx   ; -> DX:AX is a^2-3b == [-300,4294836225]
  jb   Overflow ; (*)

无符号双字整数范围从 0 到 4294967295 (*)

© www.soinside.com 2019 - 2024. All rights reserved.