最近的编辑
我试图在x86 MASM上运行这个浮点二次方程式程序.这段代码可以在Kip Irvine x86教科书中找到,我想看看它是如何工作的.以下代码如下:
include irvine32.inc
.DATA
a REAL4 3.0
b REAL4 7.0
cc REAL4 2.0
posx REAL4 0.0
negx REAL4 0.0
.CODE
main proc
; Solve quadratic equation - no error checking
; The formula is: -b +/- squareroot(b2 - 4ac) / (2a)
fld1 ; Get constants 2 and 4
fadd st,st ; 2 at bottom
fld st ; Copy it
fmul a ; = 2a
fmul st(1),st ; = 4a
fxch ; Exchange
fmul cc ; = …Run Code Online (Sandbox Code Playgroud) 我目前正在学习汇编课程,我必须在 Mac OS X 上运行代码,但我不知道如何在 Mac OS X 上运行代码
\n\n这是代码:
\n\n; Description: This program adds and subtracts 16\xe2\x80\x90bit integers.\n; Revision Date:\nINCLUDE Irvine32.inc\n.code\nmain PROC\nmov ax, 650 ; AX = 650h\nsub ax, 50h ; AX = 600h\nsub ax, 100h ; AX = 500h\nsub ax, 300h ; AX = 200h\ncall DumpRegs ; display registers\nexit\nmain ENDP\nEND main\nRun Code Online (Sandbox Code Playgroud)\n\n这是我收到的错误消息
\n\nTayvions-MacBook-Pro:~ tayvionpayton$ cd Documents/Code/\nTayvions-MacBook-Pro:Code tayvionpayton$ nasm -f macho32 -o0 assembly_Tp.asm \nassembly_Tp.asm:4: error: parser: instruction expected\nassembly_Tp.asm:5: warning: label alone on a line without …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2013 Ultimate在MASM中编写汇编语言(x86).我试图使用数组来计算使用数组的n个元素的Fibonacci序列.换句话说,我试图去一个数组元素,获取它之前的两个元素,添加它们,并将结果存储在另一个数组中.
我无法设置索引寄存器以使其工作.
我的程序设置如下:
TITLE fibonacci.asm
INCLUDE Irvine32.inc
.data
fibInitial BYTE 0, 1, 2, 3, 4, 5, 6
fibComputed BYTE 5 DUP(0)
.code
main PROC
MOVZX si, fibInitial
MOVZX di, fibComputed
MOV cl, LENGTHOF fibInitial
L1:
MOV ax, [si - 1]
MOV dx, [si - 2]
MOV bp, ax + dx
MOV dl, TYPE fibInitial
MOVZX si, dl
MOV [edi], bp
MOV dh, TYPE fibComputed
MOVZX di, dl
loop L1
exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
我无法编译这个,因为该行的错误消息"错误A2031:必须是索引或基址寄存器" MOV ebp, …
我正在使用MASM 14.0进行组装,我对以下代码的输出感到困惑.
TITLE Exercise 4 from chapter 4
; Author : Saad Ahmed
INCLUDE Irvine32.inc
.code
main PROC
mov eax, 0
mov al, 255
add al, 1
call DumpRegs ; Display registers
mov al, 127
add al, 1
call DumpRegs ; Display registers
exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
两个算术运算都在无符号整数255和127上完成.
但是,CPU将第一个操作255视为无符号整数并设置进位标志,当您将1添加到无符号255时会发生这种情况.
完整的状态标志是CF = 1 SF = 0 ZF = 1 OF = 0 AF = 1 PF = 1,eax为0
但是,第二个操作将127视为有符号整数,因为它设置了溢出标志,如果你将1加到+127就会发生这种情况.
完整的状态标志为CF = 0 SF = 1 ZF = 0 OF = …
我创建了以下程序来读取5个数字,然后dumpreg查看输入的数字...
INCLUDE Irvine32.inc
.data
count = 5
scores WORD count DUP(? )
prompt BYTE "Please type an integer score: ", 0
.code
GetScores PROTO, wArray:PTR WORD, arraySize : WORD
main proc
INVOKE GetScores,OFFSET scores, count
mov esi, OFFSET scores
mov ecx, count
mov ebx, 2
call DumpMem
mov eax, 50000
call Delay
exit
main endp
GetScores PROC, wArray:PTR WORD, arraySize : WORD
push ebp
mov ebp, esp
pushad
mov esi, wArray
movzx ecx, arraySize
cmp ecx, 0; ECX …Run Code Online (Sandbox Code Playgroud) 该装配项目读取按键并以特定颜色输出它们。当按下一个元音时,它会改变文本的颜色,直到按下另一个元音为止,直到 ESC按下为止。颜色具有一定的模式,这就是为什么sub colorCode, 8当它到达循环结束时。我只是想让它更有效率。我尝试将所有比较语句放入一行,但没有成功。
INCLUDE Macros.inc
INCLUDE Irvine32.inc
INCLUDELIB Irvine32.lib
.386
.STACK 4096
ExitProcess PROTO, dwExitCode:DWORD
.DATA
key BYTE ?
colorCode BYTE 5
max BYTE 13
.CODE
main PROC
FindKey:
mov EAX, 50
call Delay
call ReadKey
jz FindKey
MOV key, AL
cmp key, 75h
JE UP
CMP key, 6Fh
JE UP
CMP key, 69h
JE UP
CMP key, 65h
JE UP
CMP key, 61h
JE UP
CMP key, 55h
JE UP
CMP key, 4Fh
JE UP …Run Code Online (Sandbox Code Playgroud) 我目前正在按照 Kip Irvine 的“x86 处理器的汇编语言”学习汇编编程。在第 3.4.12 节中,作者指出:
该
.DATA?指令声明未初始化的数据。当定义大量未初始化数据时,该.DATA?指令会减少编译程序的大小。例如,以下代码被高效地声明:Run Code Online (Sandbox Code Playgroud).data smallArray DWORD 10 DUP(0) ; 40 bytes .data? bigArray DWORD 5000 DUP(?) ; 20,000 bytes, not initialized另一方面,以下代码生成的编译程序大 20,000 字节:
Run Code Online (Sandbox Code Playgroud).data smallArray DWORD 10 DUP(0) ; 40 bytes bigArray DWORD 5000 DUP(?) ; 20,000 bytes
我想在程序编译后查看每个版本代码的内存占用情况,这样我就可以亲自看到效果.data?,但我不确定如何做到。
我需要将此C代码转换为汇编语言代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int answer, i;
int right, wrong;
right = 0;
wrong = 0;
for(i =1; i < 11; i = i+1){
printf("What is %d + %d? ", i,i);
scanf( "%d", &answer);
if(answer == i + 1) {
printf("right! ");
right++;
}
else {
printf("Sorry, you're wrong. ");
printf("The answer is %d. ", i + 1);
wrong++;
}
}
printf("You got %d right and %d wrong. ", right, wrong );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我真的只需要知道如何将变量与汇编语言中的字符串组合在一起,就像上面的C代码一样.我想我可以处理其他一切.有人可以告诉我.我是否必须使用某种参考[]. …
我正在组装一个简单的游戏,目前我只是想根据键盘上的数字 1 还是 2 向左或向右移动播放器图标(在这种情况下它是一个字符 X)。目前我只有两个 if 然后通过减少或增加 X 坐标值来向左或向右移动我的 X。我正在使用 Irvine 32 库来获取像 Gotoxy 这样的 proc 来获取坐标值。到目前为止,我的程序将 x 显示在正确的起始位置,但是由于某种原因,当我点击 1 或 2 时,x 会向上移动一个空格而不是向左或向右移动。我在我拥有的书中无法弄清楚,我在互联网上找到的东西不在我的装配知识范围内。就目前而言,我只想向左或向右移动我的字符。稍后我将制作适当的 procs 等,但现在这是一个非常奇怪的问题。任何帮助,将不胜感激。下面是我的汇编代码:
TITLE Matrix Rain
; Description:Dodge falling numbers to reach the final level
; Authors: John , Killian
; Revision date:2/11/2015
INCLUDE Irvine32.inc
.data
player byte 'X'; Player Character
direction byte ?; Direction the player moves
startY byte 24; Starting Y position
startX byte 39; Starting X position
breakLoop byte 9 ; base case …Run Code Online (Sandbox Code Playgroud) 我一直在研究这个程序,我必须输入一个字符串,然后在该字符串中显示字符分布.
例如:
如果输入是"minecode",则输出应为
C - 1
O - 1
D - 1
E - 2
I - 1
M - 1
N - 1
这是我试图做的,但我真的不知道如何遍历循环并检查相似的字符然后增加计数.汇编程序是在32位机器上运行的MASM 615.
.686
.MODEL flat, stdcall
.STACK
INCLUDE Irvine32.inc
.DATA
msg0 BYTE "Enter a string of characters: ",0
msg1 BYTE "Character Distribution: ",0
MainArray dword 10000 dup (?)
UniqueChar dword 10000 dup (?)
CharCount dword 10000 dup (?)
.CODE
MAIN PROC
lea edx, msg0
call WriteString
call dumpregs ; 1
call ReadString
mov MainArray, eax
call …Run Code Online (Sandbox Code Playgroud)