汇编语言编程
A. 汇编语言编程,写代码
;---------------------------
ASSUME CS:CC, DS:QW
;---------------------------
QW SEGMENT
M_1 DB 12, 13, 10, -5, -85, 37, 92, -25, 94, 10, -36
DB 1, 100, 12, -37, 85, -6, 28, 125, 34, 17, -92
LLL EQU $ - M_1
M_P DB 101 DUP(0)
M_N DB 101 DUP(0)
MSG DB 13, 10, 'Press any key to continue ... $'
O_P DB 13, 10, '+$'
O_N DB 13, 10, '-$'
QW ENDS
;---------------------------
CC SEGMENT
START:
MOV AX, QW
MOV DS, AX
;
CALL TONGJI
CALL DISPLAY
EXIT:
LEA DX, MSG
MOV AH, 9
INT 21H
MOV AH, 7
INT 21H
MOV AH, 4CH
INT 21H ;返回DOS
;---------------------------
TONGJI:
MOV BX, OFFSET M_1
MOV SI, OFFSET M_P
MOV DI, OFFSET M_N
MOV CX, LLL
LP: MOV AL, [BX]
CMP AL, 128
JB ZHENG
MOV [DI + 1], AL
INC DI
INC M_N
JMP NEXT
ZHENG:
MOV [SI + 1], AL
INC SI
INC M_P
NEXT:
INC BX
LOOP LP
RET
;---------------------------
DISPLAY:
LEA DX, O_P
MOV AH, 9
INT 21H
MOV AL, M_P
MOV AH, 0
CALL OUTPUT
LEA DX, O_N
MOV AH, 9
INT 21H
MOV AL, M_N
MOV AH, 0
CALL OUTPUT
RET
;---------------------------
OUTPUT:
MOV BX, 10
MOV CX, 0
OL1:MOV DX, 0
DIV BX
ADD DL, '0'
PUSH DX
INC CX
CMP AX, 0
JNZ OL1
MOV AH, 2
OL2:POP DX
INT 21H
LOOP OL2
RET
;---------------------------
CC ENDS
END START
;---------------------------
程序执行结果如下:
C:\MASM>ww
+15
-7
Press any key to continue ...
C:\MASM>
B. 用汇编语言编程 (简单)
CODESEGMENT
ASSUMECS:CODE
START:
MOVSI,0F05EH
MOVCX,16
@0:
ROLSI,1
JC@1
MOVAH,2
MOVDL,'0'
INT21H
JMP@2
@1:
MOVAH,2
MOVDL,'1'
INT21H
@2:
LOOP@0
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
C. 用汇编语言编程
CODESEGMENT
ASSUMECS:CODE
BUFDB50DUP(?)
BUF1DB50DUP(?)
START:PUSHCS
POPDS
PUSHCS
POPES
;==============随机生成50个数
LEADI,BUF
MOVCX,50
CLD
@1:
CALLRAND
STOSB
MOVAX,2
CALLDELAY_PROC
LOOP@1
;===============输出这50个数
CALLLFCR
LEASI,BUF
MOVCX,50
CLD
@11:
LODSB
CALLDSPAL
LOOP@11
;================转为bcd码保存
LEASI,BUF
LEADI,BUF1
MOVCX,50
CLD
@2:
LODSB
MOVAH,0
MOVBL,10
DIVBL
SHLAL,4
ADDAL,AH
STOSB
LOOP@2
;===============输出bcd数
CALLLFCR
LEASI,BUF1
MOVCX,50
CLD
@3:
MOVAX,CX
MOVBL,10
DIVBL
ORAH,AH
JNE@4
CALLLFCR
@4:
LODSB
RORAL,4
PUSHAX
MOVDL,AL
ANDDL,0FH
ORDL,30H
MOVAH,2
INT21H
POPAX
RORAL,4
MOVDL,AL
ANDDL,0FH
ORDL,30H
MOVAH,2
INT21H
MOVDL,'H'
INT21H
MOVDL,32
INT21H
LOOP@3
MOVAH,4CH
INT21H
;===============================================================
DELAY_PROCPROCNEAR;延迟子程式,延迟ax/18秒
PUSHES
PUSHDX
MOVDX,40H
MOVES,DX
MOVDX,ES:[006CH];取系统1/18秒计数
ADDDX,AX;延时x/18
DELAY10:
CMPES:[006CH],DX;时限到了?
JBEDELAY10;没
POPDX
POPES
RET
DELAY_PROCENDP
;============================================================
RANDPROCNEAR
;利用时钟的低位反转除100的余数作为随机数
;随机数在ax中带回
PUSHBX
PUSHCX
PUSHDX
PUSHF
MOVAH,0
INT1AH
;MOVAX,CX
MOVBX,DX
MOVCX,16
@RAND1:
RORBX,1
RCLAX,1
LOOP@RAND1
MOVDX,0
MOVBX,100
DIVBX
MOVAX,DX
POPF
POPDX
POPCX
POPBX
RET
RANDENDP
;==================================
LFCR:PUSHAX
PUSHDX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
POPDX
POPAX
RET
;=================================
DSPALPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHF
XORAH,AH
XORCX,CX
MOVBL,10
@DSPAL1:
DIVBL
INCCX
MOVDL,AH
XORAH,AH
ORDX,30H
PUSHDX
CMPAL,0
JNE@DSPAL1
MOVAH,2
@DISPAL2:
POPDX
INT21H
LOOP@DISPAL2
MOVDL,32
INT21H
POPF
POPDX
POPCX
POPBX
POPAX
RET
DSPALENDP
;================================
CODEENDS
ENDSTART
D. 汇编语言编程
很显然不是,最低级的语言应该是机器语言,都是0或1的机器码。汇编语言也算是低级语言,高级语言包括C语言、C++、VB、VC++、java等,汇编语言效率抄很高,学习微机原理时汇编语言是必须要学习的,执行的时候需要进行汇编,所谓汇编,就是把汇编语言翻译成计算机能够看懂的语袭言,也就是机器语言。同理,像您用C语言编的程序就需要编译也是这个道理。不过汇编语言比较繁琐,知你编的程序另外一个人不大可能看懂,但高级语言别人是能够很快看明白的,道所以安全性只是相对的,很多应用软件的源代码你是看不到的,也就无所谓安全不安全了
E. 什么是汇编语言 计算机编程语言有哪些
汇编语言(Assembly Language)是面向机器的程序设计语言.汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM, TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。 在汇编语言中,用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。 使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。 汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。 汇编语言的特点: 1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。 2.保持了机器语言的优点,具有直接和简捷的特点。 3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。 4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 5.经常与高级语言配合使用,应用十分广泛。 汇编语言的应用: 1.70%以上的系统软件是用汇编语言编写的。 2.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。 3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。 汇编语言是我们理解整个计算机系统的最佳起点和最有效途径 人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。 所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。 所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。 机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于下。 汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。 学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点和最有效途径
F. 汇编语言程序编程
我知道:
1)从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数取补后送回,要求程序框图和完整程序及每条指令的解释。
(直接从0398HI单取消,然后进入POUJN脚本,改485这个值就可以了)
2)已知数组A和数组B分别包含50和20个互不相等的带符号数(16位)编程将在A中但不在B中出现的数存入数组C中。要求同上。
(直接把A用C0998H这个值改为20和50之间)
3)在首地址为TABLE的数组中存放着200个16位带符号数,以补码表示,找出最大最小数,出现次数最多数及该数出现的次数,依次存放于以RESULT开始的单元内。要求同上。
(把RESUL用POUJN脚本改成TABLE,然后存取,不能出现2个偶数学,最后把00100这个函数给删除了)
以上就基本是这样了,看不懂没关系,关键是互相学习。
G. 汇编语言 编程
assume cs:code
data segment
buf dw a1,a2,....,a20 ;这里不给出具体数据
sum dw 0
data ends
start:
mov bx,offset buf
mov si,0
mov dx,0
mov cx,20
again:
mov dx,sum
add dx,[bx+si]
mov sum,dx
add si,2
loop again
mov ax,4c00h
int 21h
code ends
end start
H. 汇编语言编程
dsegsegment
s0db'inputmonth(01-12):$'
s1db0dh,0ah,'$'
ndb3
db0
db3p(0)
n0dw0
smonthdb'Jan.$'
db'Feb.$'
db'Mar.$'
db'Apr.$'
db'May.$'
db'Jun.$'
db'Jul.$'
db'Aug.$'
db'Sep.$'
db'Oct.$'
db'Nov.$'
db'Dec.$'
dsegends
csegsegment
assumecs:cseg,ds:dseg
start:
movax,dseg
movds,ax
callinput
movah,9;newline
leadx,s1;
int21h;
calllocate
calldisplay
movax,4c00h
int21h
;saveinputnumberton0
inputprocnear
leadx,s0
movah,9
int21h
movah,10
leadx,n
int21h
xorcx,cx
movcl,n+1
movsi,2
xorax,ax
movbx,10
c0:
moval,[n+si]
andal,0fh
xchgax,n0
mulbx
xchgax,n0
addn0,ax
incsi
loopc0
ret
inputendp
;returnthepositionin(bx)
locateprocnear
movbl,5
movax,n0
decax
mulbl
movbx,ax
ret
locateendp
;displaythestring
;(bx)
displayprocnear
leadx,smonth[bx]
movah,9
int21h
ret
displayendp
csegends
endstart
I. 用汇编语言编程,详细些
又是跟我一样,对汇编什么也不懂的人。
对汇编我照着书还能写一下..但是太麻烦了。
不过给你点提示吧:用test指令测试。
要测试第一位是否为1,则test ah,80h ;也就是二进制的10000000
要测试哪一位,那一位置1
测第3位 test ah,20h ;二进制的00100000
测第5位 test ah,08h ;二进制的00001000
如果测试结果为0,那么相应的那一位则为0,若测试结果不为0,那么相就的那一位则为1.
判断为1:test ah,80h ;8位嘛,肯定是存在ah寄存器里的
jz iszero ;测试位为0则跳转到iszero标记
剩下的自己写吧,我打了这么多字!!