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

Assembly 用汇编语言计算^2-3b,assembly,emu8086,Assembly,Emu8086,我在学习一些汇编语言,我发现了一个要解决的问题,a^2-3b,其中a>=0和b …要解决的问题a^2-3b其中a>=0和b=0和b要计算一个数字的平方,请使用imul或mul指令,具体取决于该数字是否有签名。感谢您的评论,该数字已在i上签名guess@MDNasirulIslam:“其中a>=0”表示a无符号。@fuz:cwd在imul或mul之前不需要(i)mul ax始终计算ax次ax,dx寄存器不用作源。@ecm您当然是对的。不知道我为什么把它放进去。一定是一大早。非常感谢你的回答:)真的

我在学习一些汇编语言,我发现了一个要解决的问题,
a^2-3b
,其中a>=0和b
…要解决的问题
a^2-3b
其中
a>=0
b=0
b要计算一个数字的平方,请使用
imul
mul
指令,具体取决于该数字是否有签名。感谢您的评论,该数字已在i上签名guess@MDNasirulIslam:“其中a>=0”表示
a
无符号。@fuz:
cwd
imul
mul
之前不需要
(i)mul ax
始终计算
ax
ax
dx
寄存器不用作源。@ecm您当然是对的。不知道我为什么把它放进去。一定是一大早。非常感谢你的回答:)真的帮了大忙
mov bl 3b 
mov cl a 
sub cl, bl 
mov dl 
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
  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]
  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 ; (*)