计算数字的平方并将它们存储在程序集 8086 masm 中的 dw 中
Calculate square of number and store them in dw in assembly 8086 masm
我正在尝试使用蛮力计算 5 的平方,所以我尝试了这个,但它没有在 dw
中存储任何内容,我这样定义 dw
result dw 2 dup(?)
mov ax, 5
mov bx, 5
mov cx, 1
mov dx, ax
loop1:
add ax, dx
cmp bx, cx
je endLoop
add cx, 1
jmp loop1
endLoop:
mov result, ax
calculate the square of 5
5^2 = 25 但您的代码生成 30
你的循环总共做了 5 次加法(1 次在 fallthrough 中,4 次在跳回中)。
由于 AX
以其原始值开始,所以你得到的太多了!
从零开始 AX
或少做 1 次迭代:
mov ax, 5
mov bx, 5
mov cx, 1
mov dx, ax
XOR AX, AX ; start at zero
loop1:
add ax, dx
cmp bx, cx
je endLoop
add cx, 1
jmp loop1
-
mov ax, 5
mov bx, 5
mov cx, 1+1 ; one iteration less
mov dx, ax
loop1:
add ax, dx
cmp bx, cx
je endLoop
add cx, 1
jmp loop1
it does not store anything in dw
and I define dw
like this result dw 2 dup(?)
确保使用如下代码设置 DS
:
mov ax, data ; maybe you'll need 'mov ax, @data'
mov ds, ax
尝试使用方括号的替代内存寻址:
mov [result], ax
来自评论:
i am trying to retrieve the result like this
lea si, result
inc si
mov dl, [si]
mov ah, 2h
int 21h
为什么要取结果的第二个字节?那可能是纯零。
而且结果有2位数字,所以你需要输出2个字符。
这是我最近的其他回答之一的解决方案:
mov ax, [result] ; AX=25
mov bl, 10
div bl ; AL=2 AH=5
add ax, "00" ; AL='2' AH='5'
mov dx, ax
mov ah, 02h
int 21h ; Outputs the character in DL='2'
mov dl, dh
mov ah, 02h
int 21h ; Outputs the character in DL='5'
我正在尝试使用蛮力计算 5 的平方,所以我尝试了这个,但它没有在 dw
中存储任何内容,我这样定义 dw
result dw 2 dup(?)
mov ax, 5
mov bx, 5
mov cx, 1
mov dx, ax
loop1:
add ax, dx
cmp bx, cx
je endLoop
add cx, 1
jmp loop1
endLoop:
mov result, ax
calculate the square of 5
5^2 = 25 但您的代码生成 30
你的循环总共做了 5 次加法(1 次在 fallthrough 中,4 次在跳回中)。
由于 AX
以其原始值开始,所以你得到的太多了!
从零开始 AX
或少做 1 次迭代:
mov ax, 5
mov bx, 5
mov cx, 1
mov dx, ax
XOR AX, AX ; start at zero
loop1:
add ax, dx
cmp bx, cx
je endLoop
add cx, 1
jmp loop1
-
mov ax, 5
mov bx, 5
mov cx, 1+1 ; one iteration less
mov dx, ax
loop1:
add ax, dx
cmp bx, cx
je endLoop
add cx, 1
jmp loop1
it does not store anything in
dw
and I definedw
like thisresult dw 2 dup(?)
确保使用如下代码设置 DS
:
mov ax, data ; maybe you'll need 'mov ax, @data'
mov ds, ax
尝试使用方括号的替代内存寻址:
mov [result], ax
来自评论:
i am trying to retrieve the result like this
lea si, result
inc si
mov dl, [si]
mov ah, 2h
int 21h
为什么要取结果的第二个字节?那可能是纯零。
而且结果有2位数字,所以你需要输出2个字符。
这是我最近的其他回答之一的解决方案:
mov ax, [result] ; AX=25
mov bl, 10
div bl ; AL=2 AH=5
add ax, "00" ; AL='2' AH='5'
mov dx, ax
mov ah, 02h
int 21h ; Outputs the character in DL='2'
mov dl, dh
mov ah, 02h
int 21h ; Outputs the character in DL='5'