汇编器是如何写的(怎么使用visual studio 2010编写汇编语言程序)

本文目录
怎么使用visual studio 2010编写汇编语言程序
使用内联汇编写 ,它的格式有两种,一种是__asm 直接接汇编指令语句,
比如,__asm xor eax, eax //清零eax
另一种是加上花括号,类似于一个函数,比如
__asm {
mov eax, 1 ;1到eax
mov ebx, 2 ;2到ebx
add eax, ebx ;eax 和ebx相加
}
使用内联汇编有个好处可以直接使用C/C++中的变量 ,比如
int a = 2;
__asm mov a, 2 //可以使用变量,只有一条
另外使用内联汇编最需要注意的是数组。比如 int a = {1,2} ;
不可以直接
__asm{
mov a, 1
mov a, 2
}
这样是错误的, 需要 mov a,2 为什么是4呢?因为内联汇编转换后是数组a的地址偏移,而不是序号。
vc中的内联汇编 简单的很, 要是在linux中使用内联汇编,费了劲了。。没事欢迎到 百度 0x30 贴吧 分享一下C/C++的心得,或者加入百度知道 0x30 团队,帮助别人的时候,自己 也可以学到东西 。。
汇编语言程序该怎么写
code segment
assume cs:code
org 100h
start:jmp begin
x dw 11,12,13,14,15,16,17,18,19,20
y dw 1,2,-3,-4,5,-6,-7,-8,9,10
sign dw 1,1,0,0,1,0,0,0,1,1
; 1表示加, 0 表示减
z dw 10 dup(?)
begin:push cs
pop ds
push cs
pop es
mov cx,10
cld
lea si,x
lea di,z
@main:
mov ax,
cmp word ptr,0
je @main1
add ax,
mov ,ax
jmp @main2
@main1:
sub ax,
mov ,ax
@main2:
inc si
inc si
inc di
inc di
loop @main
lea si,z
mov cx,10
cld
@main3:
lodsw
call dispaxs
loop @main3
mov ah,4ch
int 21h
;=========================================
; 将要显示的有符号数置于 ax 中
DISPAXS PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSHF
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,6
LEA DI,DISPAXSS
@DISPAXS:
MOV BYTE PTR ,32
INC DI
LOOP @DISPAXS
PUSH AX
MOV DL,32
MOV AH,2
INT 21H
POP AX
MOV BYTE PTR NZS,0
MOV BYTE PTR SIGNS,0
CMP AX,0
JGE @DISPAXS0
MOV BYTE PTR SIGNS,1
NEG AX
@DISPAXS0:
PUSH AX
LEA SI,DIVARRS
LEA DI,DISPAXSS
INC DI
MOV CX,5
@DISPAXS1:
POP AX
MOV DX,0
MOV BX,
DIV BX
PUSH DX
CMP AL,0
JNE @DISPAXS2
CMP BYTE PTR NZS,1
JE @DISPAXS2
CMP CX,1
JE @DISPAXS2
MOV DL,20H
JMP @DISPAXS3
@DISPAXS2:
ADD AL,30H
MOV DL,AL
MOV BYTE PTR NZS,1
@DISPAXS3:
MOV BYTE PTR,DL
INC SI
INC SI
INC DI
LOOP @DISPAXS1
POP DX
CMP BYTE PTR SIGNS,1
JNE @DISPAXS6
LEA SI,DISPAXSS
ADD SI,5
@DISPAXS4:
CMP BYTE PTR ,32
JE @DISPAXS5
DEC SI
JMP @DISPAXS4
@DISPAXS5:
MOV BYTE PTR ,’-’
@DISPAXS6:
LEA DX,DISPAXSS
MOV AH,9
INT 21H
POPF
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DIVARRS DW 10000,1000,100,10,1
NZS DB 0
SIGNS DB 0
DISPAXSS DB 32,32,32,32,32,32,’$’
DISPAXS ENDP
;==================================
code ends
end start

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10




