|
发表于 2013-10-19 00:14:16
|
显示全部楼层
翻出来我曾经写过的,写的很臭,发上来献丑吧- assume CS:code,DS:data,SS:stack
- ;编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串'welcome to masm!'
- ;绿字是00001010B 绿底红字是00101100B 白底蓝字是01110001B
- ;每行是160个字节,就是0A0H个字节
- data SEGMENT
- db 'welcome to masm!'
- db 00000010B,00100100B,01110001B
- data ENDS
- stack SEGMENT
- dw 0
- stack ENDS
- code SEGMENT
- start: MOV AX,data
- MOV DS,AX
- MOV AX,0B800H
- MOV ES,AX
- MOV AX,STACK
- MOV SS,AX
- MOV SP,2
- XOR BX,BX
- MOV AX,' '
- MOV CX,80*25
- setdisplay: MOV ES:[BX],AX
- ADD BX,2
- LOOP setdisplay ;-------->完成清屏
-
- MOV CX,3
- MOV BP,10H
- XOR DI,DI
- strSide: PUSH CX ;外层循环3次,为了写入3行字符串
- XOR SI,SI
- MOV CX,10H
- strIn: XOR BX,BX
- MOV AL,[BX+SI]
- MOV AH,DS:[BP]
- MOV ES:[BX].720H[DI],AX ;写入的位置,第一行字符串的起始处就是720H这个位置
- INC SI ;SI是读取DS段的指针.每次增加1
- ADD DI,2 ;DI是写入指针,一次写入一个字,所以每次+2
- LOOP strIn ;内层循环16次,这16次的循环就是完成一行字符串的写入
-
- INC BP ;颜色值增加
- ADD DI,80H ;DI增加80H就是换一行
- POP CX
- LOOP strSide
-
- MOV AX,4c00h
- INT 21h
- code ENDS
- END start
复制代码 |
|