assembly - 计算数字的平方并将它们存储在装配 8086 masm 中的 dw 中
问题描述
我正在尝试使用蛮力计算 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
解决方案
计算 5 的平方
5^2 = 25 但您的代码产生 30
你的循环总共做了 5 次加法(1x 在fallthrough 和 4x 在 jump back)。
既然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
它不存储任何东西
dw
,我dw
这样定义result dw 2 dup(?)
确保DS
使用如下代码进行设置:
mov ax, data ; maybe you'll need 'mov ax, @data'
mov ds, ax
尝试使用方括号的替代内存寻址:
mov [result], ax
来自评论:
我正在尝试检索这样的结果
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'
推荐阅读
- python - 如何编写此函数和计算集成?
- laravel - Laravel 在提交带有图像和数据的表单时显示所需的错误消息
- python - 如何抑制 yfinance 的异常?
- sails.js - ReferenceError:list.ejs 上的“postIts.forEach(function(postit)”?postIts 未在 eval 中定义(编译时为 eval
- firebase - Firebase 更新到 8.2.0 后如何修复列出用户的 401 错误
- python - 如何使用掩码在tensorflow中保留k个点
- git - 如何将 Github 远程存储库链接到预先存在的本地存储库?
- html - 如何将文本列表居中,然后在 w3.css 列中对其进行调整
- python - 如何解决 gurobipy.GurobiError:Objective Q not PSD?(用简单的例子)
- python - Python3.7如何连接SQL Server和TLS1.2?