问题描述
我正在研究某种汇编语言,因此发现要解决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>=0
和b<=100
。
约束a>=0
和b<=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(*)