有没有办法将C/C++转换为Assembly而不是HEX.
不像gcc或其他编译器所做的那样(C/C++ - > ASM - > HEX).
仅将其转换为ASM.
有没有办法用gcc做,我的意思是在将C/C++翻译成ASM时停止编译?
特别感谢您的关注,对不起我的基本问题
我有一个单词,有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.
我该怎么办?
是否有之间的速度差mov bx,ax,并mov bh,ah在16位MS-DOS应用程序的8086架构?
好的,问题很简单.如果我有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)
我一直在做一个程序,我需要将寄存器的值与某个数字进行比较.虽然在emu8086上模拟我没有任何问题,但是TASM编译器在所有行上都给出了错误:
cmp bx, 0xF7F0h
Run Code Online (Sandbox Code Playgroud)
错误如下所示:
***Error*** div.ASM(163) Illegal number
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
当然我可以将F7F0h值放入另一个寄存器或变量中,但我更喜欢将它保持为常量值.
我试图在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) 我正在组装游戏,使用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) 我尝试在程序集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)
代码无效,它跳转到错误的标签.
有人可以给我示例或修复我的代码吗?
我正在组装一个"西蒙"游戏我需要在按钮打开时发出哔哔声,哔哔声也应该彼此不同.谢谢
这是我编写的代码,用于以相反的顺序将数据从一个数组移动到另一个数组.
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)