小编rkh*_*khb的帖子

将C代码翻译为Assembly

我需要将此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代码一样.我想我可以处理其他一切.有人可以告诉我.我是否必须使用某种参考[]. …

c x86 assembly masm irvine32

3
推荐指数
2
解决办法
1636
查看次数

在程序集中向左或向右移动字符

我正在组装一个简单的游戏,目前我只是想根据键盘上的数字 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)

x86 assembly masm irvine32

3
推荐指数
1
解决办法
2853
查看次数

如何使用汇编语言中的errno打印错误消息

我正在stdout使用sys_write系统调用编写汇编语言,如果在写入期间发生错误然后正常退出,我想打印错误消息.

我只能退出但不能使用errno和打印错误信息perror.如果syscall失败,如何处理错误的任何建议.我想根据发生的错误类型打印错误消息.我在Ubuntu 14.04上,我正在使用nasm来编译汇编代码.目前我只做这个:

test rax,rax    ; Lets make sure the file descriptor is valid
js  skipWrite   ;
Run Code Online (Sandbox Code Playgroud)

linux assembly x86-64 nasm

3
推荐指数
2
解决办法
1925
查看次数

C使用NASM指向EFLAGS

对于我学校的任务,我需要编写一个C程序,它使用汇编程序进行16位加法.除了结果,EFLAGS也将被退回.

这是我的C程序:

int add(int a, int b, unsigned short* flags);//function must be used this way
int main(void){
    unsigned short* flags = NULL;
    printf("%d\n",add(30000, 36000, flags);// printing just the result
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

目前程序只打印出结果而不是标志,因为我无法得到它们.

这是我使用NASM的汇编程序:

global add
section .text

add:
    push ebp    
    mov ebp,esp
    mov ax,[ebp+8]
    mov bx,[ebp+12]
    add ax,bx
    mov esp,ebp
    pop ebp
    ret
Run Code Online (Sandbox Code Playgroud)

现在一切顺利.但我不知道如何获得必须[ebp+16]指向标志寄存器的指针.教授说我们将不得不使用这个pushfd命令.

我的问题只在于汇编代码.在得到标志的解决方案后,我将修改C程序以发出标志.

c x86 pointers nasm eflags

3
推荐指数
1
解决办法
347
查看次数

在程序集x86中查找字符串中的出现次数

我一直在研究这个程序,我必须输入一个字符串,然后在该字符串中显示字符分布.

例如:
如果输入是"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)

x86 assembly masm irvine32

3
推荐指数
1
解决办法
959
查看次数

汇编程序无法找到现有文件

我的TASM已安装到我的TASM,TLINK和文件所在的文件夹中.具体来说就是C:/TASM/BIN.运行单个.asm文件时没有问题但是当我包含另一个文件以便我的代码看起来模块化时,会出现这个问题.

我已经包含了6个文件,其中包括printMzpos1.kt.(文件扩展名在汇编文件包含中无关紧要.)我的主文件名是c.asm.该图像显示printMzpos1.kt在我的TASM挂载的文件夹中:

在此输入图像描述

这是我的代码的快照.我包括printMzpos1.kt之后main endp和之前end main.printMzpos1.kt包含打印框的过程.

.model small
.386
.stack 64

.data
colorW      db  0Fh
xPos        dw  ?
currmode    db  ?
horLineLen  dw  120
verLineLen  dw  70

include macro.kt

.code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MAIN proc far
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

mov ax, @data
mov ds, ax
mov es, ax

setVidMode  
cls

call printMzPos1
;call move3Boxes

retVidMode  
mov ax, 4c00h
int 21h

MAIN endp

include printMzPos1.kt
include printMzPos2.kt
include printMzPos3.kt
include …
Run Code Online (Sandbox Code Playgroud)

x86 assembly dos tasm dosbox

2
推荐指数
1
解决办法
6508
查看次数

x86 示例程序中的分段错误

我正在阅读这本书《从头开始编程》,乔纳森·巴特利特。在这个第一次显示函数调用约定的程序上,我在像书中那样输入后运行它时遇到了分段错误。该函数只从堆栈中取出 2 个数字,并在 %eax 中返回第一个数字的第二个数字幂。

这是有问题的程序:

.code32

.section .data

.section .text

.globl _start
_start:

  pushl $3
  pushl $2
  call power
  addl $8, %esp

  pushl %eax

  pushl $2
  pushl $5
  call power
  addl $8, %esp

  popl %ebx

  addl %eax, %ebx

  movl $1, %eax
  int $0x80

.type power, @function
power:
  pushl %ebp
  movl %esp, %ebp
  subl $4, %esp

  movl 8(%ebp),  %ebx
  movl 12(%ebp), %ecx

  movl %ebx, -4(%ebp)

power_loop:
  cmpl $1, %ecx
  je end_power

  movl -4(%ebp), %eax
  imull %ebx, %eax
  movl …
Run Code Online (Sandbox Code Playgroud)

x86 assembly gnu-assembler ld segmentation-fault

2
推荐指数
1
解决办法
463
查看次数

汇编语言新行

我是汇编语言编程的新手,我希望我的输出有单独的行,以便更容易阅读,但是,我编写了代码并让它工作,但后来被告知我实际上无法使用Irvine 程序来创建一个新的行。我的教科书只使用了尔湾的“Crlf”,而其他人在本网站上提出类似问题的代码完全破坏了我的程序,所以现在我迷路了。

我尝试过的一个是:

mov ah, 0Eh       ;print new line sequence
mov al, 0Dh
int 10h
mov al, 0Ah
int 10h
Run Code Online (Sandbox Code Playgroud)

无论如何,这里仍然是我的 Irvine 函数的完整代码。有人可以帮助我在不使用“call Crlf”的情况下获得我正在寻找的输出吗?或者让我知道为什么上面的代码破坏了我的程序?我确定我遗漏了一些东西。

INCLUDE Irvine32.inc


.data
prompt BYTE 'Enter a positive integer: ', 0     
report1 BYTE 'The sum is: ', 0              
report2 BYTE 'The product is: ', 0
report3 BYTE 'The power result is: ', 0
temp DWORD ? ;
.code

main PROC
; Main program control procedure.
; Calls: GetInteger, AddNumbers, MultiplyNumbers,
;       WriteInt, CalculatePower

call GetInteger             ;Get …
Run Code Online (Sandbox Code Playgroud)

assembly masm line irvine32

2
推荐指数
1
解决办法
2万
查看次数

推动1小于%ecx堆叠

我正在尝试向堆栈推送一个值one less than %ecx.

所以我尝试了这个指令:

pushl $(%ecx - 1)
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下错误as.

fact.s: Assembler messages:
fact.s:49: Error: register value used as expression
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,我做了以下事情:

movl %ecx, %edx
subl $1, %edx
pushl %edx
Run Code Online (Sandbox Code Playgroud)

但有没有办法不使用额外的寄存器(%edx在这种情况下)?并在一个指令?

x86 assembly cpu-registers att

2
推荐指数
2
解决办法
359
查看次数

如何从 Rhino 为 V8 重写此代码?

我曾经在 GAS 上写过脚本。因为我确实使用 GAS 通过聊天和 Google 电子表格管理出勤率。聊天工具是聊天工作。它适用于 Gas(Rhino)。但它不适用于 V8。

我试图将 line19 重写for each (var obj in json){for (var obj in json){

请告诉我什么是坏的...我应该重写哪个?

function recordTime(){
  /*Sheet setting*/
  var wsData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("data"); //DataSheetSetting
  var wsStaff = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("coworkers"); //CoworkersMasterSetting
  /*ChatworkURLrequest*/
  var params = {
    headers : {"X-ChatWorkToken" : 'anynumber'},
    method : "get"
  };
  var roomID = anynumber; //ROOMID
  var url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages?force=0"; //GetMessageFromGroupchat
  try{
    var respons = UrlFetchApp.fetch(url, params); //GetResponseFromChatworkAPIendpoint
    var json = JSON.parse(respons.getContentText()); //Returnjson
    for …
Run Code Online (Sandbox Code Playgroud)

v8 rhino google-sheets google-apps-script

2
推荐指数
1
解决办法
291
查看次数