来自一次汇编语言实验。 我进行了详细的注解。 汇编语言与硬件结合较紧密,代码很多都是寄存器操作和地址运算。编写或阅读汇编程序时,脑袋中需要有这样一幅底层机器的画卷:各种寄存器的数据和状态;内存中的数据段,代码段的位置;各个jump指令如何实现跳转及分支结构;什么时候需要保存现场等等。我觉得借助这样一种形象化的思维(寄存器状态和内存的实址物理结构)可以更好地编写汇编程序;相反,中高级语言如c语言,只考虑内存的逻辑结构和语法规则就行。 ;#Mode=DOS DATA SEGMENT DAT DB 3,1,2,4,8,5,9,6,10,7 COUNT DB 10,10 DATA ENDS ;............................. CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV BL,1 LP1: CMP BL,0 JE B_OUT XOR BL,BL ;将BL清零 MOV CL,COUNT ;COUNT用于外层的计数 DEC CL ;CL用于内层的计数 push cx ;将CX压入堆栈 LEA DI,DAT ;将数据段首地址赋值给DI LP2: MOV AL,[DI] CMP AL,[DI+1] ;将前一个数字与后一个数字比较 JLE LP3 [...]