标签: x86-16

将C/C++转换为8086/88汇编

有没有办法将C/C++转换为Assembly而不是HEX.

不像gcc或其他编译器所做的那样(C/C++ - > ASM - > HEX).

仅将其转换为ASM.

有没有办法用gcc做,我的意思是在将C/C++翻译成ASM时停止编译?

特别感谢您的关注,对不起我的基本问题

c c++ compiler-construction assembly x86-16

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

将二进制转换为十进制并在程序集中显示

我有一个单词,有4个单元格

RESULT DW 4 DUP(0)
Run Code Online (Sandbox Code Playgroud)

例如,它将包含二进制数

MOV RESULT,   0H
MOV RESULT+2, 0H
MOV RESULT+4, 35A4H
MOV RESULT+6, E900H

现在结果包含以十进制方式0000000035A4E900H表示900000000.不是我想在显示器上打印900000000.

我该怎么办?

binary assembly decimal x86-16

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

mov bx,ax和mov bh之间的速度是否存在差异啊?

是否有之间的速度差mov bx,ax,并mov bh,ah在16位MS-DOS应用程序的8086架构?

x86 assembly dos mov x86-16

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

8086汇编 - 如何添加2个字节,其总和将大于一个字节

好的,问题很简单.如果我有2个随机字节,比如150(a [0])和215(b [0]),我想添加它们.显然他们的总和不适合一个字节,所以如果我添加它们我会得到一个溢出.我已经尝试在al中存储其中一个字节并执行cbw,这样我就会在单词ax上表示相同的数量,并将第二个字节添加到那个,但是有些东西我无法理解,因为它不起作用.这是一个示例代码:

data segment
  a db 150,182,211
  b db 215,214,236
data ends

code segment
start:
  mov ax,data
  mov ds,ax

  lea si,a          ; these 2 shouldn't be here since i realised eventually that
                    ; i could use
  lea di,b          ; a constant for memory addressing and not necessarily a
                    ; a register
  mov ax,0000
  mov bl,a[0]
  mov al,b[0]
  cbw
  adc bx,ax      ; so this didn't work out well

  mov ax,0000
  mov al,a[0] 
  cbw            ; convert one of the bytes into …
Run Code Online (Sandbox Code Playgroud)

x86 assembly x86-16

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

Intel 8086 TASM - 非法号码


我一直在做一个程序,我需要将寄存器的值与某个数字进行比较.虽然在emu8086上模拟我没有任何问题,但是TASM编译器在所有行上都给出了错误:

cmp bx, 0xF7F0h
Run Code Online (Sandbox Code Playgroud)

错误如下所示:

***Error*** div.ASM(163) Illegal number
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题?
当然我可以将F7F0h值放入另一个寄存器或变量中,但我更喜欢将它保持为常量值.

assembly tasm x86-16

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

INT 0x13/AH = 0x02适用于软盘映像,但不能在闪存驱动器上刻录

我试图在x86程序集中创建一个简单的命令系统.命令系统是在0x1000:0000中加载的第二个阶段.要查看我的引导加载程序,请单击此stackoverflow问题.

这是第二阶段命令系统:



[BITS 16]
[ORG 0x0000]      

mov ax, cs
mov ds, ax   
xor cx, cx  
mov bx, welcome_msg
call str_prt
call new_line
mov bx, creator_msg
call str_prt
call new_line
mov bx, boot_msg
call str_prt
call new_line
mov bx, [buffer]

call new_line

mov ah, 0x0e
mov al, 0x0a
int 0x10
mov al, 0x0d
int 0x10
mov al, '>'
int 0x10

loop:
in al, 64h  
test al, 1    
je loop
xor ah, ah
int 0x16
call key_scan
jmp loop …
Run Code Online (Sandbox Code Playgroud)

assembly nasm osdev bochs x86-16

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

删除屏幕上的字符

我正在组装游戏,使用EMU8086进行学校项目.在这个游戏中,我需要允许用户输入一个字符串才能进步.当他输入字符串时,他可能会输入错误的内容并使用它backspace来纠正它.问题是backspace将光标移动到前一个字符上,但先前输入的字符仍然存在.为什么退格不清除前一个字符?如何修复程序,以便删除屏幕上的前一个字符?

我的代码是:

data segment

ends

stack segment
dw   128  dup(0)
ends    
StringHelper db 20 dup(?)
Line db 13,10,'$'
FullInput db 'You cant type more than 20 letters!!! please try again!!',13,10,'$'
t db '$'
code segment
PROC PrintMessage
  ;BX MUST have OFFSET OF MESSAGE
  ; if you want to go down a line do (lea bx,line)      
  mov dx,bx      
  mov ah,09h
  int 21h     
  ret 
 endp printMessage
 proc InputString          
;askes the user to input chars untill he press (enter) …
Run Code Online (Sandbox Code Playgroud)

assembly backspace x86-16 emu8086

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

程序集8086中的分支表

我尝试在程序集8086中执行分支表.

我写的:

    org 100h                       

    ; START THE PROGRAM

    mov si, 1
    jmp cs:table[si]

    table dw C1, C2, C3

C1:
    add bx, 1
    jmp EXIT

C2:
    add bx, 2
    jmp EXIT

C3:
    add bx, 3
    jmp EXIT
C4:  
    add bx, 4
    jmp EXIT

; EXIT PRORGRAM   
EXIT:
    mov ah, 0
    int 16h
    ret
Run Code Online (Sandbox Code Playgroud)

代码无效,它跳转到错误的标签.

有人可以给我示例或修复我的代码吗?

assembly x86-16

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

程序集8086 - DOSBOX - 如何产生哔声?

我正在组装一个"西蒙"游戏我需要在按钮打开时发出哔哔声,哔哔声也应该彼此不同.谢谢

x86 assembly dos dosbox x86-16

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

bp寄存器在基于索引时不起作用

这是我编写的代码,用于以相反的顺序将数据从一个数组移动到另一个数组.

data segment
arr1 db 10h,20h,30h,40h
arr2 db 4 dup(0)
cnt dw 04h
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea si,arr1
lea di,arr2
mov cx,cnt
mov bp,cx
mov bx,00h
back:
mov dl,[si][bx]
mov [di+bp-1],dl
dec bp
Run Code Online (Sandbox Code Playgroud)

上面的这行代码(bp寄存器)没有加载我希望用基于索引寻址的内存.

inc bx
loop back
mov ah,4ch
int 21h
code ends
end start
Run Code Online (Sandbox Code Playgroud)

assembly masm x86-16

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

标签 统计

assembly ×10

x86-16 ×10

x86 ×3

dos ×2

backspace ×1

binary ×1

bochs ×1

c ×1

c++ ×1

compiler-construction ×1

decimal ×1

dosbox ×1

emu8086 ×1

masm ×1

mov ×1

nasm ×1

osdev ×1

tasm ×1