标签: x86-16

A2004 MASM32问题

我有一个MASM32汇编程序的问题

以下代码是我从MASM32教程复制的Hello World示例:

.model small
.stack
.data
    message   db "Hello world!", "$"
.code

_main   proc

    mov   ax,seg message
    mov   ds,ax

    mov   ah,09
    lea   dx,message
    int   21h

    mov   ax,4c00h
    int   21h

_main   endp
end _main
Run Code Online (Sandbox Code Playgroud)

在尝试汇编时,MASM32抛出A2004错误,并带有以下注释:

C:\masm32\console.asm(11) : error A2004: symbol type conflict

任何人都可以帮助我吗?这段代码与TASM汇编程序完美配合,但现在我必须使用MASM32,而且我之前已经证明可以与TASM一起使用的任何汇编代码都有这个A2004错误.

如果这是相关的,我有一个32位CPU运行Win7操作系统.

谢谢.

assembly masm masm32 x86-16

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

关于汇编语言的问题

我正在读"汇编语言的艺术"一书.我遇到了这两行.

the three byte encoding for mov ax, [1000] would be 0C6h, 00h,
10h and the three byte encoding for mov ax, [2000] would be 0C6h, 00h, 20h.
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我mov ax,[1000]如何转换为oc6h,ooh,10h和mov ax,[2000]转换为0C6h,00h,20h.有人能告诉我计算结果吗?提前致谢.

编辑:我是汇编编程的先驱,请与描述一起解释.

x86 assembly x86-16

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

计算机科学中十六进制数的重要性

在研究编程8085,8086和微进程器时,我们总是有十六进制表示.二进制数在计算机中很重要.但这些十六进制数字如何重要?有历史意义吗?

如果有人指出一些历史文章也会很好.

编辑:

计算机如何处理十六进制数?例如,当给出十六进制数作为输入时,8085会发生什么?

assembly hex masm 8085 x86-16

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

区别:INT 10H,INT 16H,INT 21H

有人可以用汇编语言向我解释:INT 10H,INT 16H,INT 21H之间的区别吗?我们什么时候应该使用它们中的任何一个?

例如:在这个简单的代码中打印"Hello,World!" 为什么我们在第四行使用int 10h?为什么我们在最后一行之前使用int 16h?

name "hi-world"
org 100h     
mov ax, 3     
int 10h      
mov ax, 1003h
mov bx, 0
int 10h
mov ax, 0b800h
mov ds, ax
mov [02h], 'H'

mov [04h], 'e'

mov [06h], 'l'

mov [08h], 'l'

mov [0ah], 'o'

mov [0ch], ','

mov [0eh], 'W'

mov [10h], 'o'

mov [12h], 'r'

mov [14h], 'l'

mov [16h], 'd'

mov [18h], '!'


mov cx, 12  ; number of characters.
mov di, 03h ; start from …
Run Code Online (Sandbox Code Playgroud)

binary assembly emulation x86-16

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

"LOOP $"是什么意思?

在汇编示例中,我发现: 在此输入图像描述

没有名为"$"的标签.这个"LOOP $"是什么?这个循环的起点在哪里?请解释 .提前致谢 .

assembly x86-16

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

当LODSB为0000h时SI寄存器应为FFFFh

我正在制作8086仿真器,并使用5150的IBMPCBIOSv3进行测试.但是由于SI寄存器在LODSB之后是FFFF,它会停止.SI寄存器在LODSB之前为0,因此在LODSB之后它应该是-1.或其他什么?

assembly emulation x86-16

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

装配 - 在图形模式下打印字符

我正在尝试在图形模式下打印字符.通常当我打印一个我正在做的角色时:


mov ah,14   ; ah=14
mov al,'x' 
int 10h     ; print the character
Run Code Online (Sandbox Code Playgroud)

这次它不起作用.我想问题是我切换到图形模式:


push ax
mov ah, 0
mov al, 13h
int 10h
pop ax
ret
Run Code Online (Sandbox Code Playgroud)

那我怎么还能使用图形模式(我需要它)并打印一个字符?我正在使用nasm编译器,bochs调试器和8086平台.

非常感谢!

assembly nasm bochs x86-16

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

在DOSBox的Sound Blaster设备上播放.wav文件

我想在assembly/8086/masm/dosbox中制作一个程序,将键盘变成各种乐器,所以我需要能够播放一些.wav文件以产生所需的声音.我知道beep char并通过声音产生声音向pc扬声器发送频率(端口41h,42h和61h),但两种方式显然不会让我在那里.

我四处搜索,发现我需要int 21h使用Sound Blaster打开文件,了解.wav格式和声音编程知识.

不幸的是我找不到任何有用的文档如何在Dosbox(或一般)中使用Sound Blaster,如果你可以帮助我解决如何在dosbox上播放.wav文件的问题,或者如果你有任何解决方法我是所有的耳朵(更准确的眼睛).

audio assembly wav microprocessors x86-16

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

[邓特曼书第三版]。16位8086如何寻址16倍于8080的内存?

邓特曼说8086可以寻址的内存是8080的16倍,并对此进行了详细阐述,为16 * 64K = 1MB。因此,我假设一次使用16位(16位处理器)* 64K,因为16条地址线(2 ^ 16)。但是,通过这种计算逻辑,同样具有16条地址线的8080(8位处理器)是否应该能够寻址8 * 64K = 0.5MB?

那么8086是否应该能够处理8080两倍的地址?

请注意突出显示的句子

x86 assembly memory-segmentation x86-16

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

用x86 16位汇编语言编写的调试校验和算法

我目前正在对软件进行逆向工程,该软件可以为给定的数据缓冲区计算2字节宽的校验和。该代码来自16位DLL(NE格式),并使用Borland C ++进行了编译。我怀疑校验和为CRC-16,且多边形为0x8408,但是我没有机会计算相同的CRC,所以我想知道实现是否为“ CRC16标准”。

这是程序集的实现:

crc_cal proc    far

var_4= word ptr -4
arg_0= word ptr  6
arg_2= dword ptr  8

mov ax, seg dseg37
inc bp
push    bp
mov bp, sp
push    ds
mov ds, ax
sub sp, 2
push    si
push    di
xor cx, cx
mov dx, 0FFFFh
mov [bp+var_4], 8408h

loc_42646:
les bx, [bp+arg_2]
add bx, cx
mov al, es:[bx]
xor al, dl
mov dl, al
inc cx
xor di, di
jmp short loc_42672

loc_42657:
mov si, dx …
Run Code Online (Sandbox Code Playgroud)

assembly checksum reverse-engineering crc16 x86-16

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