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

问题描述

我正在研究某种汇编语言,因此发现要解决a^2-3b的问题,其中a> = 0且b 我最初的算法是

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,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 等式来求解? 预先感谢。

解决方法

...要解决的问题a^2-3b,其中a>=0b<=100

约束a>=0b<=100并没有说明所涉及的数字是有符号还是无符号


有符号数字(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,[b]
  mul  bx       ; -> DX:AX is 3b == [0,dx   ; -> CX:BX is 3b == [0,[a]
  mul  ax       ; -> DX:AX is a^2 == [0,4294836225]

  sub  ax,4294836225]
  jb   Overflow ; (*)

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