小编MDu*_*Duh的帖子

如何使用 NASM 汇编 16 位 asm 代码,然后在 Linux 中调试它,然后在 DOSBox 中生成可执行文件

我们被要求编写 16 位汇编代码并将其汇编以在 DOSBox 中运行。

我知道 16 位汇编代码与普通 x86 汇编代码的不同之处在于它使用bits 1616 位寄存器(axbxcx、 ...)。

我尝试搜索如何将NASM 用于 16 位代码,但不幸的是不明白它在说什么。

我只是想知道NASM中使用什么参数来汇编16位汇编代码?(-bin-obj?),然后如果可能的话,如何在 Linux 中调试它。如果不行,如何在DOSBox中调试?

我真的很想在这里得到一些帮助,因为我们得到的资源非常少来理解这一点,所以我真的很困惑。

x86 assembly gdb nasm dosbox

6
推荐指数
1
解决办法
9971
查看次数

如何检查argv [count]是否为整数

我正在尝试用C++创建一个命令行应用程序,我想确保在某个命令参数之后输入是一个整数.

对于此示例,我想检查下一个参数是否是"-p"命令参数后面的整数.这是我现在代码的片段.

while (count < argc){
    if (strcmp("-p", argv[count]) == 0){
        has_p = true; //Boolean
        pid = atoi(argv[count + 1]);
        if (pid == 0 && argv[count + 1] != "0" ){
            err = 1;
            cout << "pid argument is not a valid input" << endl;
            pid = -1;
        }
        count++;
    }
...
}
Run Code Online (Sandbox Code Playgroud)

现在,此代码正确捕获此输入中的错误:

  • -p 1777
  • -p sss
  • -p sss17
  • -p [空格] -U

但是输入格式失败了

  • -p 17sss

我尝试通过使用sprintf进行比较来解决这个问题.不幸的是,使用char数组指针提供sprintf只会在buffer2中输出1个字符.

while (count < argc){
    if (strcmp("-p", argv[count]) == 0){
        has_p = true; //Boolean …
Run Code Online (Sandbox Code Playgroud)

c printf pointers

5
推荐指数
1
解决办法
6139
查看次数

标签 统计

assembly ×1

c ×1

dosbox ×1

gdb ×1

nasm ×1

pointers ×1

printf ×1

x86 ×1