在汇编中逐位减去两个整数
我试图减去2个整数,并得到了此算法 b = 0 difference = 0 for i = 0 to (n-1) x = bit i of X y = bit i of Y bit i of difference = x xor y xor b b = ((not x) and y) or ((not x) and b) or (y and b) end for loop 我已经实现了这一行b = ((not x) and y) or ((not x) and b) or (y and b).我应该如何在代码中实现算法的最后一行 这是我到目前为止所拥有的: INCLUDE Irvine32.inc .data prompt1 BYTE "Enter the first integer: ",0dh,0ah,0 prompt2 BYTE "Enter the second integer: ",0dh,0ah,0 prompt3
12 2024-03-31
编程技术问答社区
试图用汇编语言翻转一个三角形
INCLUDE Irvine32.inc .code main PROC mov ecx, 6 L1: call Proc1 call CRLF loop L1 exit main ENDP proc1 PROC USES ecx mov al, 'A' L2: call WriteChar inc al loop L2 ret proc1 ENDP END main 我的代码的输出是 ABCDEF ABCDE ABCD ABC AB A 以三角形的形式向下下降,但我需要将其翻转为 的位置 A AB ABC ABCD ABCDE ABCDEF 编辑: 试图镜像正确的三角形. A A AB BA ABC CBA ABCD DCBA
16 2024-03-17
编程技术问答社区
当我用control-F5运行我的汇编语言程序时,Visual Studio没有打开一个DOS窗口。
在 我已经设置了一切.当我单击 ctrl + f5 时,它没有显示任何内容.我只希望它用黑色窗口显示我的名字.我该怎么做? 解决方案 您很可能将子系统设置为" Windows Application",这意味着该过程将以无关的控制台开头.尝试写作将失败. 您可以将控制台与AttachConsole()和/或AllocConsole()关联,也可以通过链接命令行(/SUBSYSTEM:CONSOLE)更改子系统. 其他解决方案 而不是从开发环境中运行程序,而是打开命令提示符窗口,然后导航到创建.EXE并直接运行的文件夹.这就是命令行计划的运行方式. 如果您有在开发环境中运行它,也许是为了调试,然后在return或exit语句上放一个断点,以便在窗口关闭之前停止. 其他解决方案 此答案与Ben Voigt相同.我只是解释. 请检查此设置. 我以这种方式解决了此问题. 打开项目设置
4 2024-03-17
编程技术问答社区
在汇编中,我如何在字母表中获得下一个对应字母,而与以前的字符大写相反?
我试图逆转字符串,但同时将每个字符更改为字母中的下一个相应字母,但也必须是相反的大写字母.例如,当用户输入"测试"时,输出应为" utfu". 如何修改代码以实现此目标? INCLUDE Irvine32.inc INCLUDELIB Irvine32.lib .data buffer byte 128 dup(0) msg1 byte "Enter a string of at most 128 characters:", 0dh, 0ah, 0 msg2 byte " Here it is in LOWERCASE and in reverse order: ", 0dh, 0ah, 0 msg3 byte 0dh, 0ah, " There are ",0 msg4 byte " lower-case characters ", 0dh, 0ah, 0 countLower byte 0
12 2024-03-17
编程技术问答社区
x86汇编。Irvine32-获取数组的最后一个元素
我是新手的组装,我需要汇编语言Irvine32任务的帮助.我想知道我要在哪里出错.我相信我的代码是80%的正确,但我没有看到或识别.这是程序详细信息. "编写一个包含一系列单词的汇编语言程序.该程序将数组的最后一个元素加载到适当大小的寄存器中并打印它.(请勿硬编码最后一个元素的索引.) > INCLUDE Irvine32.inc .data val1 word 1,2,3,4,5,6 val2 = ($-val1)/2 .code main PROC mov ax, 0 mov ax, val1[val2] Call WriteDec Call DumpRegs exit main ENDP END main 解决方案 首先,您的代码具有一个错误:val1[val2]索引元素数量为单词,而不是字节中的长度(除非MASM语法比我预期的更神奇).并且它从数组的末端读取,因为第一个元素在val1[0]. . 要找到末端,您
20 2024-03-17
编程技术问答社区
如何用汇编语言反转和打印一个字符串
因此,我的作业是在汇编代码中编写一个程序,该程序可以发表声明,收到用户输入的字符串.打印该字符串,然后使用CPU堆栈将其反向它,然后再次打印.这就是我到目前为止的. INCLUDE Irvine32.inc .data buffer byte 20 DUP(0) byteCount DWORD ? Question byte "Please enter your name." ,0 Greeting byte "Hello " ,0 Statement byte " Here is your name backwards" .code main proc mov edx , OFFSET Question call WriteString call CRLF Call CRLF mov edx, OFFSET buffer mov Ecx, SIZEOF buffer call ReadString push edx mov EDX ,OFFSET gree
20 2024-03-17
编程技术问答社区
将两个字符串打印到寄存器中
如果我尝试执行以下操作,我会一直遇到错误: TITLE (Filename.asm) INCLUDE Irvine32.inc .data name BYTE "Jdoe", 0 menu BYTE "Hello user of this computer!", 0dh, 0ah, "I am a robot AI designed to help you with you programs", 0dh, 0ah, "Please allow me to assist you as you work on your program", 0dh, 0ah, "Name Please> ", 0 .code main PROC ; instructions are added here, in the main procedure ; which is in the code s
18 2024-03-17
编程技术问答社区
在装配中打印刽子手的形象
有更好的方法打印一个挂号人物吗? FIG0 DB 0DH,0AH,' +=======+',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' ========+',0DH,0AH,'$' FIG1 DB 0DH,0AH,' +=======+',0DH,0AH,' | |',0DH,0AH,' O |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' ========+',0DH,0AH,'$' FIG2 DB 0DH,0AH,' +=======+',0DH,0AH,' |
10 2024-03-17
编程技术问答社区
非递归斐波那契数列的组装
在某些作业中,我必须在汇编中创建一个斐波那契序列程序.我创建了此代码,但是它似乎无法正常工作,我不确定原因.我相信我做得正确,但是eax仍然是" 2"每个循环. INCLUDE Irvine32.inc .data prev DWORD ? next DWORD ? val DWORD ? count DWORD ? total DWORD ? myMsg BYTE "Fibonacci Sequence ",0dh,0ah,0 .code main PROC mov ecx,15 mov val,1 mov prev,-1 mov eax,1 mov edx,OFFSET myMsg call WriteString L1: mov count,
16 2024-03-17
编程技术问答社区
在装配中打印三角星
我正在尝试打印这样的三角形: .data prompt BYTE "Please enter the number of rows in the pyramid: ", 0 numRows DWORD ? count DWORD 0 .code main PROC mov edx, OFFSET prompt call WriteString call ReadInt mov numRows,eax mov ecx,numRows + 1 ; Let ecx = numRows + 1 L1: inc count ; Increment count mov eax,ecx L2: sub eax,count ; eax = eax -
12 2024-03-17
编程技术问答社区
返回字符串中的字母的指针
这是我搜索的代码,其中一些字符串由一个字母组成: selectedWords BYTE "BICYCLE" inputLetter BYTE 'Y' cld mov ecx, LENGTHOF selectedWords mov edi, offset selectedWords mov al, inputLetter ;Load character to find repne scasb ;Search jne notfound 但是如何将指针返回字符串中的字母? 如果我想与其他人更改一个LETER.如果您在字符串中指向字母,很容易做到. 解决方案 如果repne scasb找到元素,EDI指向之后的元素.您必须将其减少以获取指向所需元素的指针. 您无需清除方向标志(cld).设置方向标
8 2024-03-17
编程技术问答社区
汇编语言中的选择排序
这是我的代码..我必须在数组上执行选择.这是作业. Irvine32.inc设置了我的内存模型.关于我做错什么的任何建议将有所帮助.我已经重做了几次. INCLUDE Irvine32.inc .data myArray DWORD 10, 12, 3, 5 .code main PROC call Clrscr MOV EDI, OFFSET myArray MOV ECX, LENGTHOF myArray CALL PRINT_ARRAY MOV EDI, OFFSET myArray MOV ECX, LENGTHOF myArray CALL SORT_ARRAY CALL CRLF MOV EDI, OFFSET myArray MOV ECX, LENGTHOF myArray CALL PRINT_ARRAY exit main ENDP ;-----------
14 2024-03-17
编程技术问答社区
如何在MASM汇编中进行选择排序?
所以我试图按顺序排列一个数组,这似乎对我不起作用.我知道我的交换过程是错误的,而我的MinIndex过程只能在一半的时间工作,但是随机填充的数组生成的良好. 感谢Vitsoft的工作代码: include Irvine32.inc ; Constants NUM_INTEGERS = 20 NUM_RANGE = 99d TO_ENSURE_NOT_ZERO = 1d .data ; Declare Arrays ; Declare Array of 20 Integers array byte NUM_INTEGERS dup(?) ; Displayed Annotation for Unsorted Array unsortedArrayText byte "Randomly Generated Array, Unsorted: ", 0dh, 0ah, 0 ; Displayed Annotation for Sorte
10 2024-03-17
编程技术问答社区
ASMx86: 如何在一个字符串中挑出一个字母?
我对角色如何在汇编中的工作感到困惑.既然所有内容都处于位置,那么这是否意味着所有字符基本上都是寄存器中的十六进制版本/ascii值? 例如,如果我想将"我喜欢派"放入登记处,它会显示为" 48H 4C484B45H 504945H"?如果我想获得所有"我"字母,我需要使用 之类的命令 ; "command to get string input" getI: cmp BYTE PTR [edx],48h je L1 L1: add [edx],1 loop getI 我基本上正在尝试找到一种从输入的字符串中隔离字符的方法. 解决方案 您的方法接近工作: getI: cmp BYTE PTR [edx],'i' ; your assembler will know what that is jne L1 ; skip the code for 'i' handli
10 2024-03-17
编程技术问答社区
x86汇编 输入一组整数
下面的代码要求用户输入整数,并且代码将吐回用户的相同集合. include irvine32.inc .data input dword ? prompt1 byte "Input your numbers: ",0 .code mWriteNum Macro input push ecx push eax mov eax, offset input call writedec pop eax push ecx endM mReadInput MACRO input push ecx push eax mov eax, offset input mov ecx, sizeof input call Readint mov input, eax pop eax pop ecx endM main proc
20 2024-03-17
编程技术问答社区
汇编写号到文件
我尝试通过汇编器写入数字 Include Irvine32.inc .data fileName DB 'number.txt',0 FileHandle DD ? numberBytes DD ? number DD 101 numberChar DD $-cislo .code WriteToFileP proc ;create file push NULL push FILE_ATTRIBUTE_NORMAL push CREATE_ALWAYS push NULL push 0 push GENERIC_WRITE push offset fileName call CreateFileA mov FileHandle,eax ;write push NULL push offset numberBytes push numberChar push number push FileHandle call WriteFile ; close file
18 2024-03-17
编程技术问答社区
如何删除字符串中某个字符之后的所有内容?
"?"之后如何删除字符串中的所有内容. ?到目前为止,我已经搜索了"?"的代码.我如何从那里开始? 这是我的代码. INCLUDE Irvine32.inc .data source BYTE "Is this a string? Enter y for yes, and n for no",0 .code main PROC mov edi, OFFSET source mov al, '?' ; search for ? mov ecx, LENGTHOF source cld repne scasb ; repeat while not equal jnz quit dec edi ; edi points to ? end main 解决方案 您可以在"?"之后替换所有内容.由零,那么"?"之后的所有角色被"删除": INCLUDE Irvine32.inc .data sourc
20 2024-03-17
编程技术问答社区
在cpp文件中运行asm程序
我正在尝试从CPP文件中的ASM文件运行过程,但是我会遇到这样的错误: Error 1 error LNK2019: unresolved external symbol _calka referenced in function _main D:\Addem\main.obj Project Error 2 error LNK1120: 1 unresolved externals D:\Addem\Debug\Project.exe 1 1 Project 这是我的主要cpp: #include using namespace std; extern "C" void calka(); int main() { calka(); system("Pause"); return 0; } 和我的calka.asm ; The calka Subroutine (c
12 2024-03-17
编程技术问答社区
反转和改变给定字符串的大小写x86汇编
该程序的目的是在切换每个字母的情况时逆转给定的字符串.字符串不能超过20个字符,如果输入更长,则程序要求用户再次输入字符串.当用户输入" Enter"并打印结束句子后结束时,程序结束. 实施此问题我有3个问题: 我尝试通过使用呼叫ReadString来获取输入字符串,并且由于给出Enter键时此过程停止,因此当我按Enter键以正常完成程序时,控制台冻结端子.我如何纠正我的代码以使其打印一条结尾消息,然后以返回值0的方式结束程序? 如果输入字符串超过20个字符,则应要求用户再次输入字符串.所以我写了ja l1.出于某种原因,bur,mov bytecount,eax; CMP ByteCount,20;似乎无法正确过滤案件.当行动bytecount时,执行了eax时,字节的值是正确的,但是当程序执行下一行CMP ByteCount,20时,bytecount的值更改.我不知道我在做什么错. Casechange过程在执行时冻结,所以我想它是无限地循环的,但是我找不
10 2024-03-17
编程技术问答社区
x86汇编MASM中的动态堆内存
我在Kip Irvine的汇编X86中发现的以下示例使用动态内存分配来反复分配大量内存块,直到超过堆大小为止.我已经通过包括WriteWindowsMsg过程来修改代码的某些部分,因为出于某种奇怪的原因,我收到的错误说该过程不存在.这是修改的代码: ; Heap Test #2 (Heaptest2.asm) INCLUDE Irvine32.inc .data HANDLE TEXTEQU HeapCreate PROTO, flOptions:DWORD, ; heap allocation options dwInitialSize:DWORD, ; initial heap size, in bytes dwMaximumSize:DWORD ; maximum heap size, in bytes LocalFree PROTO, pErrorMsg:DWORD FormatMessage PROTO, FORMAT_MESSAGE_AL
16 2024-03-17
编程技术问答社区