阵列中的位置和最高值
所以我正在尝试学习汇编,而我的练习表有一个示例,我必须创建一个程序,一次将10个数字输入到一个数组中.我必须打印最高的价值,并且当它输入时.我的比较几乎没有任何经验,但是我想以某种方式存储高价值并比较它的位置? 代码: include irvine32.inc .data num dw 10 dup(0) count db 1 prompt db "Enter a number: ",0 yesMsg db "hi val is in location ",0 hiMsg db "The high value is ",0 .code main proc mov ebx,offset num mov ecx,10 LOOP1: mov edx,offset prompt call writestring call readint mov [ebx],ax add ebx,2 loop LOOP1 mov ec
2 2024-01-08
编程技术问答社区
试图用汇编语言翻转一个三角形
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
2 2023-12-15
编程技术问答社区
在汇编中,我如何在字母表中获得下一个对应字母,而与以前的字符大写相反?
我试图逆转字符串,但同时将每个字符更改为字母中的下一个相应字母,但也必须是相反的大写字母.例如,当用户输入"测试"时,输出应为" 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
6 2023-12-15
编程技术问答社区
随机数组用选择排序-垃圾字符输出的大小>130的随机数组
我的程序将用户输入(整数在10到200之间),并打印出输入的随机数,并将它们存储在数组中.然后将阵列排序并打印出来(请参见下图).中位数的数字也印在屏幕上. 我找不到错误.该程序可完美地适用于小于或等于130的数字,但不超过130. TITLE Program5 (Program5.asm) INCLUDE Irvine32.inc ; (insert constant definitions here) MIN_INPUT = 10 MAX_INPUT = 200 LO_RANDOM = 100 HI_RANDOM = 999 .data request DWORD 10 ask_user BYTE "How many numbers should be generated? [10 ... 200]: ", 0 error BYTE "Invalid input"
0 2023-12-15
编程技术问答社区
将寄存器的值移到一个数组中
我正在处理这个组装问题,在该问题中,我在array1中的每个元素中循环并存储该数组的索引,其中条目为" f". 我正在为X86英特尔处理器使用MASM.汇编语言 INCLUDE Irvine32.inc .data array1 BYTE "FMMFMFMMFFMMFFFMFMFM",0 indexa1 BYTE SIZEOF array1 DUP(?) ArraySize = ($ - array1) .code main PROC mov esi,0 ; index mov ecx,ArraySize L1: cmp esi,ecx ; check to continue loop jl L2 ; continue jmp L5 ; exit L2: cmp array1[esi], "F" ; Check if "F" je L3
8 2023-12-15
编程技术问答社区
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]. . 要找到末端,您
2 2023-12-15
编程技术问答社区
如何用汇编语言反转和打印一个字符串
因此,我的作业是在汇编代码中编写一个程序,该程序可以发表声明,收到用户输入的字符串.打印该字符串,然后使用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
4 2023-12-15
编程技术问答社区
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
0 2023-12-15
编程技术问答社区
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
0 2023-12-15
编程技术问答社区
如何删除字符串中某个字符之后的所有内容?
"?"之后如何删除字符串中的所有内容. ?到目前为止,我已经搜索了"?"的代码.我如何从那里开始? 这是我的代码. 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
10 2023-12-15
编程技术问答社区
如何在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
8 2023-12-15
编程技术问答社区
如何用汇编语言进行循环
我将如何计算斐波那契数序列中的前12个值,并能够将其放入EAX reg中.并显示调用转储吗?使用间接地址,我知道我需要在这里进行循环,但我不确定该如何处理.任何帮助或技巧都将受到赞赏. INCLUDE Irvine32.inc ; (insert symbol definitions here) .data ; (insert variables here) Fibonacci BYTE 1, 1, 10 DUP (?) .code main PROC ; (insert executable instructions here) ; (This below will show hexa contents of string.) mov esi, OFFSET Fibonacci ; offset the variables mov ebx,1 ; byte fo
2 2023-12-15
编程技术问答社区
反转和改变给定字符串的大小写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过程在执行时冻结,所以我想它是无限地循环的,但是我找不
2 2023-12-15
编程技术问答社区
使用MASM和Irvine32库打印一个数组
我的程序接受4个整数,应该将它们显示给用户.打印值时,我不会得到预期的结果.我正在使用 masm 与kip的我的代码是: include irvine32.inc .data msg byte "Enter a number",0 arr dword 4 dup(?) len=($-arr)/4 .code main PROC mov edx,offset msg call writestring call crlf mov eax,0 mov ecx,0 .while(ecx
2 2023-12-15
编程技术问答社区
如何打印乘法导致EDX:EAX在组装中
在组装中乘以32位的数字时,结果将放在EDX:EAX组合中.结果的上半部分进入EDX,下半部分为EAX.如果EDX和EAX都有结果的两个部分,那么我如何使用.386 .model flat, stdcall .stack 4096 ExitProcess proto, dwExitCode:dword include Irvine32.inc .data num1 dword 1000000 num2 dword 1000000 temp dword ? full_result qword ? .code main proc mov eax, num1 mul num2 ;Result will be put in EDX:EAX (Upper half of number and Lower half of number) ;EDX has the value 232 in decimal. 000000E8 in hex ;EAX has the value 3567587328 i
4 2023-12-15
编程技术问答社区
错误代码A4011多个.MODEL指令,但我的代码中只有一个
我使用MASM和KIP Irvine的Libs使用了Visual Studio 2022社区.我必须将它们用于当前的课程(VS和KIP),我花了几天的时间才能弄清楚如何正确获取所有文件路径,现在我唯一的问题是关于"多个多重"的错误.model指令. 这是我的代码: .386 .MODEL flat,stdcall .stack 4096 ExitProcess proto,dwExitCode:dword includelib \Irvine\Irvine32.lib include \Irvine\Irvine32.inc include \Irvine\macros.inc includelib \Irvine\kernel32.lib .data prompt1 db "Please enter your Name >> ",0 prompt2 db "Please enter your age >>",0 fname db 2
2 2023-12-15
编程技术问答社区
ASM如何知道一个算术运算是有符号还是无符号?
我正在使用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 两个算术操作均在未签名的整数255和127上完成. 但是,CPU将第一个操作255作为无符号整数并设置随身携带标志,这将在您将1添加到未签名的255中时发生. 完整的状态标志为cf = 1 sf = 0 zf = 1 of = 0 af = 1 af = 1 pf = 1 at eax as 0
2 2023-12-15
编程技术问答社区
跳跃目的地太远:3个字节之多
i m在循环中有问题,其中包含的代码很长,它给了我错误jump destination too far : by 3 byte(s).当删除时: mov edx,offset str1 call writestring 主proc下方的此部分没有错误.但是我需要此字符串用户输入一个负数以提供消息.如何? INCLUDE Irvine32.inc .data money dword 200,100,50,20,10,5,1 str1 byte "Enter the amounts for each value of money : ",0 str2 byte "The sum of your moneys are:",0 total dword 0 buffer dword 1000 dup(0),0 str3 by
4 2023-12-15
编程技术问答社区
制作一个频率表
我应该创建一个包含256个dwords的频率表,并使用ASCII代码作为索引来计算字符串中字符的出现数.我会遇到如何使用存储的ASCII值作为索引的索引和增量.这是我到目前为止所拥有的. TITLE String Find INCLUDE Irvine32.inc Get_freqs PROTO, ptrTarget:PTR BYTE, ptrFreqTable:PTR BYTE .data targetStr BYTE "AAEBDCFBBC",0 freqTable DWORD 256 DUP(0) .code main PROC INVOKE Get_freqs, ADDR targetStr, ADDR freqTable mov ecx,LENGTHOF freqTable mov edx,LENGTHOF freqTable L1
0 2023-12-15
编程技术问答社区
我的程序不会对大于130的数组进行排序
因此,我的程序应该吸用用户输入(一个整数在10到200之间),并打印出一个随机数的数组并打印出该数组的排序版本.但是,这仅在我以130或更少的时间输入时起作用. 我不知道我还能做什么.它有效,但只有一半.有什么方法可以优化此代码?我已经放置了线条来帮助显示我遇到的问题. ****我运行了调试器,并且在程序引发异常错误的情况下发表了评论.***** TITLE Program5 (Program5.asm) INCLUDE Irvine32.inc ; (insert constant definitions here) MIN_INPUT = 10 MAX_INPUT = 200 LO_RANDOM = 100 HI_RANDOM = 999 .data ; (insert variable definitions here) intro BYTE "Fun with Arrays! by ", 0
6 2023-12-15
编程技术问答社区