转载的:(任意输入一个字符,然后输出一个大字符)
total_len equ 8*128 ;01
;****************************************8
message segment ;03資料段開始
message0 db 0dh, 0ah,'按任意鍵(Esc鍵離開):$'
char_graph db total_len dup(?)
message ends ;06 資料段結束
;*********************************************
code segment ;08 程式碼區段開始
assume cs:code, ds:message
;___________________________________________
main proc far ;11 指程式開始
start: push ds ;12 將返回DOS資訊存入堆疊
sub ax,ax
push ax
mov bx,0f000h ;16
mov cx,total_len
mov ds, bx ;18 使DS指向BIOS段位址
mov si,0fa6eh ;19 使SI指向BIOS中ASCII位元圖之偏移位址
mov ax, message
mov di, offset char_graph
mov es,ax ;22 使ES指向本程式的資料段
rep movsb ;23 搬移
mov ds, ax ;25 使DS指向本程式的資料段
nxt_char:
mov dx, offset message0
mov ah, 9
int 21h ;29
call crlf
input: mov ah, 0 ;31 輸入按鍵
int 16h
cmp al,1bh
je exit
cmp al, 07fh
ja input ;36
mov dh, al ;38 保存該鍵的ASCII於DH
mov si, offset char_graph
cbw ;40 計算該ASCII之偏移位址
mov cl, 3
shl ax, cl
add si, ax ;43 並存於SI
cld ;44 使LODSB往高位址處取得資料
mov ch, 8 ;45 每個ASCII字元圖以8位元組表示
nxt_byte:
lodsb ;47 取得該ASCII字元的其中一個位元組
mov cl, 8 ;48 每個位元組有8位元
nxt_bit:
mov dl, dh ;50 決定是要印出空白還是該字元
shl al, 1 ;51 決定方法是該位元為0則印空白
jc print ;52 反之印出該ASCII字元
mov dl,' ' ;53
print: mov ah,2 ;54
push ax ;55 為避免AL值改變,故存於堆疊
int 21h ;56 印出
pop ax ;57 取回AL值
dec cl
jnz nxt_bit ;59 是否印下一位元
call crlf ;61 否,則印出換行及歸位字元
dec ch
jnz nxt_byte ;63 是否印下一位元組
jmp nxt_char ;64 否,則跳到輸入按鍵
exit: ret ;66 返回DOS
main endp
;_____________________________________________
crlf proc near ;69
push ax
mov ah, 2
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
pop ax
ret
crlf endp ;78
;_________________________________________________
code ends ;80
;*************************************************
stack segment stack ;82 堆疊段
dw 80 dup (?)
stack ends ;84
;*************************************************
end start ;86 指定程式進入點
这是我编的小A变大A的C++程序,但搞不懂herbert_1987说的反汇编,还得请教大家
#define han 9
#define lie 2*han
#include<iostream>
#include<string>
using namespace std;
main()
{
int i,j,m,n,k;
i=han/2;j=lie/2;
string data[han][lie];
for(m=0;m<han;m++)
for(n=0;n<lie;n++)
{
k=m;
if(n==j-k||n==j+k||m==i&&n>j-i&&n<j+i)
{data[m][n]='A';
cout<<data[m][n];
}
else
{
data[m][n]=' ';
cout<<data[m][n];
}
if(n==lie-1)
cout<<endl;
}
}
[此贴子已经被作者于2007-6-3 17:30:42编辑过]