我有一个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操作系统.
谢谢.
我正在读"汇编语言的艺术"一书.我遇到了这两行.
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.有人能告诉我计算结果吗?提前致谢.
编辑:我是汇编编程的先驱,请与描述一起解释.
在研究编程8085,8086和微进程器时,我们总是有十六进制表示.二进制数在计算机中很重要.但这些十六进制数字如何重要?有历史意义吗?
如果有人指出一些历史文章也会很好.
编辑:
计算机如何处理十六进制数?例如,当给出十六进制数作为输入时,8085会发生什么?
有人可以用汇编语言向我解释: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) 我正在制作8086仿真器,并使用5150的IBMPCBIOSv3进行测试.但是由于SI寄存器在LODSB之后是FFFF,它会停止.SI寄存器在LODSB之前为0,因此在LODSB之后它应该是-1.或其他什么?
我正在尝试在图形模式下打印字符.通常当我打印一个我正在做的角色时:
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/8086/masm/dosbox中制作一个程序,将键盘变成各种乐器,所以我需要能够播放一些.wav文件以产生所需的声音.我知道beep char并通过声音产生声音向pc扬声器发送频率(端口41h,42h和61h),但两种方式显然不会让我在那里.
我四处搜索,发现我需要int 21h使用Sound Blaster打开文件,了解.wav格式和声音编程知识.
不幸的是我找不到任何有用的文档如何在Dosbox(或一般)中使用Sound Blaster,如果你可以帮助我解决如何在dosbox上播放.wav文件的问题,或者如果你有任何解决方法我是所有的耳朵(更准确的眼睛).
邓特曼说8086可以寻址的内存是8080的16倍,并对此进行了详细阐述,为16 * 64K = 1MB。因此,我假设一次使用16位(16位处理器)* 64K,因为16条地址线(2 ^ 16)。但是,通过这种计算逻辑,同样具有16条地址线的8080(8位处理器)是否应该能够寻址8 * 64K = 0.5MB?
那么8086是否应该能够处理8080两倍的地址?

我目前正在对软件进行逆向工程,该软件可以为给定的数据缓冲区计算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)