e598b0:嘰嘱嘲嘳嘴嘵嘶嘷嘸嘹嘺嘻嘼嘽嘾嘿
e59980:噀噁噂噃噄噅噆噇噈噉噊噋噌噍噎噏
e59990:噐噑噒噓噔噕噖噗噘噙噚噛噜噝噞噟
e599a0:噠噡噢噣噤噥噦噧器噩噪噫噬噭噮噯
e599b0:噰噱噲噳噴噵噶噷噸噹噺噻噼噽噾噿
e59a80:嚀嚁嚂嚃嚄嚅嚆嚇嚈嚉嚊嚋嚌嚍嚎嚏
e59a90:嚐嚑嚒嚓嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟
e59aa0:嚠嚡嚢嚣嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚯
e59ab0:嚰嚱嚲嚳嚴嚵嚶嚷嚸嚹嚺嚻嚼嚽嚾嚿
e59b80:囀囁囂囃囄囅囆囇囈囉囊囋囌囍囎囏
e59b90:囐囑囒囓囔囕囖囗囘囙囚四囜囝回囟
e59ba0:因囡团団囤囥囦囧囨囩囪囫囬园囮囯
e59bb0:困囱囲図围囵囶囷囸囹固囻囼国图囿
e59c80:圀圁圂圃圄圅圆圇圈圉圊國圌圍圎圏
e59c90:圐圑園圓圔圕圖圗團圙圚圛圜圝圞土
e59ca0:圠圡圢圣圤圥圦圧在圩圪圫圬圭圮圯
e59cb0:地圱圲圳圴圵圶圷圸圹场圻圼圽圾圿
e59d80:址坁坂坃坄坅坆均坈坉坊坋坌坍坎坏
e59d90:坐坑坒坓坔坕坖块坘坙坚坛坜坝坞坟
e59da0:坠坡坢坣坤坥坦坧坨坩坪坫坬坭坮坯
e59db0:坰坱坲坳坴坵坶坷坸坹坺坻坼坽坾坿
e59e80:垀垁垂垃垄垅垆垇垈垉垊型垌垍垎垏
e59e90:垐垑垒垓垔垕垖垗垘垙垚垛垜垝垞垟
e59ea0:垠垡垢垣垤垥垦垧垨垩垪垫垬垭垮垯
e59eb0:垰垱垲垳垴垵垶垷垸垹垺垻垼垽垾垿
e59f80:埀埁埂埃埄埅埆埇埈埉埊埋埌埍城埏
2013年7月25日木曜日
UTF-8の全角を表示するプログラム改良版
/*ひな型Hello*/
#include <stdio.h>
main(){
int a,b,c;
FILE *fp;
fp=fopen("725a.txt","wb");
if(fp==NULL){
printf("fail\n");
return;
}
for(a=0xe1;a<=0xec;a++){
for(b=0x80;b<=0xbf;b++){
for(c=0x80;c<=0xbf;c++){
if((c%16)==0){
printf("%x",a);
printf("%x",b);
printf("%x",c);
printf(":");
fprintf(fp,"%x",a);
fprintf(fp,"%x",b);
fprintf(fp,"%x",c);
fprintf(fp,":");
}
printf("%c",a);
printf("%c",b);
printf("%c",c);
fprintf(fp,"%c",a);
fprintf(fp,"%c",b);
fprintf(fp,"%c",c);
if((c%16)==15){
printf("\n");
fprintf(fp,"\n");
}
}
}
}
fclose(fp);
}
#include <stdio.h>
main(){
int a,b,c;
FILE *fp;
fp=fopen("725a.txt","wb");
if(fp==NULL){
printf("fail\n");
return;
}
for(a=0xe1;a<=0xec;a++){
for(b=0x80;b<=0xbf;b++){
for(c=0x80;c<=0xbf;c++){
if((c%16)==0){
printf("%x",a);
printf("%x",b);
printf("%x",c);
printf(":");
fprintf(fp,"%x",a);
fprintf(fp,"%x",b);
fprintf(fp,"%x",c);
fprintf(fp,":");
}
printf("%c",a);
printf("%c",b);
printf("%c",c);
fprintf(fp,"%c",a);
fprintf(fp,"%c",b);
fprintf(fp,"%c",c);
if((c%16)==15){
printf("\n");
fprintf(fp,"\n");
}
}
}
}
fclose(fp);
}
UTF-8の全角を出力するプログラム
/*ひな型Hello*/
#include <stdio.h>
main(){
int a,b,c;
FILE *fp;
fp=fopen("723a.txt","wb");
if(fp==NULL){
printf("fail\n");
return;
}
for(a=0xe1;a<=0xec;a++){
for(b=0x80;b<=0xbf;b++){
for(c=0x80;c<=0xbf;c++){
printf("%c",a);
printf("%c",b);
printf("%c",c);
fprintf(fp,"%c",a);
fprintf(fp,"%c",b);
fprintf(fp,"%c",c);
if((c%16)==15){
printf("\n");
fprintf(fp,"\n");
}
}
}
}
fclose(fp);
}
#include <stdio.h>
main(){
int a,b,c;
FILE *fp;
fp=fopen("723a.txt","wb");
if(fp==NULL){
printf("fail\n");
return;
}
for(a=0xe1;a<=0xec;a++){
for(b=0x80;b<=0xbf;b++){
for(c=0x80;c<=0xbf;c++){
printf("%c",a);
printf("%c",b);
printf("%c",c);
fprintf(fp,"%c",a);
fprintf(fp,"%c",b);
fprintf(fp,"%c",c);
if((c%16)==15){
printf("\n");
fprintf(fp,"\n");
}
}
}
}
fclose(fp);
}
2013年7月21日日曜日
lsコマンドの真似事lss.c
lss.c
$ gcc -o lss lss.c
$ ./lss
$ ./lss .c (エルエスエス空白ポチシー)
$ ./lss dir
$ ./lss lss
などなど
#include <sys/syscall.h>
#include <unistd.h>
#ifdef __linux__
# include <linux/types.h>
/* # include <linux/dirent.h> */
# include <linux/unistd.h>
# include <errno.h>
#else
# include <dirent.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define AMAX 256
struct dirent {
long d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[256];
};
struct node {
long fileno;
char filename[AMAX];
char atime[AMAX];
char rwxx[AMAX];
off_t asize;
struct node *back,*next;
};
char atime[AMAX];
char filename[AMAX];
char rwxx[AMAX];
off_t asize,sumsize1=0,sumsize2=0;
void timecpy(char a[AMAX],char b[AMAX]);
void rwx(char a[AMAX],long b);
long ic=0,sumcnt1=0,sumcnt2=0;
struct node *node_create();
struct node *shojun(struct node *temp);
struct node *sttc1,*stt;
struct node *startc1,*endc1;
struct node *info,*start,*last,*gcdata,*gc2;
struct stat buf2;
char *search(char *text,char *key);
int kensaku(char *ss);
long cnt=0;
char tt[100];
int j;
int ynflg;
int overflg=0;
int argc1;
char *argv1,p[AMAX];
int main(int argc,char *argv[]){
int i,im,d_size;
int fd;
char buf[4096],ch;
char ss[500],*p;
char yn[20];
argc1=argc;
argv1=argv[1];
strcpy(ss,".");
j=1;
kensaku(ss);
}
int kensaku(char *ss){
int i,im,d_size,k;
int fd;
char buf[4096],ss1[100][500];
char *p;
j++;
if((fd=open(ss,O_RDONLY))<0){
perror("open");
j--;
return 1;
}
while((d_size=syscall(SYS_getdents,fd,(struct dirent *)&buf,sizeof buf))>0){
for(i=0;i<d_size;i+=((struct dirent *)&buf[i])->d_reclen){
strcpy(ss1[j],ss);
strcat(ss1[j],"/");
strcat(ss1[j],((struct dirent *)&buf[i])->d_name);
if(stat(ss1[j],&buf2)<0){
perror("stat");
j--;
return 1;
}
if(ic==0){
startc1=sttc1=gcdata=gc2=node_create();
ic++;
strcpy(gcdata->filename,((struct dirent *)&buf[i])->d_name);
timecpy(gcdata->atime,ctime(&buf2.st_mtime));
rwx(gcdata->rwxx,buf2.st_mode);
gcdata->asize=buf2.st_size;
}
else{
gcdata->next=node_create();
gcdata=gcdata->next;
gcdata->back=gc2;
gc2=gc2->next;
strcpy(gcdata->filename,((struct dirent *)&buf[i])->d_name);
timecpy(gcdata->atime,ctime(&buf2.st_mtime));
rwx(gcdata->rwxx,buf2.st_mode);
gcdata->asize=buf2.st_size;
}
}
}
info=startc1;
last=NULL;
while(info){
startc1 =info->next;
info->next=NULL;
stt =shojun(info);
info =startc1;
}
startc1=stt;
endc1=last;
ic=1;
info=startc1;
while(info){
info->fileno=ic;
info=info->next;
ic++;
}
if(argc1==1){
info=startc1;
while(info){
sumcnt1++;
sumsize1+=info->asize;
printf("%5ld: %-10s %s %s %8ld\33[0m\n",info->fileno,info->filename,info->rwxx,info->atime,info->asize);
info=info->next;
}
printf("\nこのフォルダの総数は %ld でファイルの総和は %ld\n",sumcnt1,sumsize1);
}
if(argc1==2){
info=startc1;
while(info){
sumcnt1++;
sumsize1+=info->asize;
p=search(info->filename,argv1);
if(!strcmp(argv1,"dir")&&info->rwxx[0]=='d'){
sumcnt2++;
sumsize2+=info->asize;
printf("%5ld: %-10s %s %s %8ld\33[0m\n",info->fileno,info->filename,info->rwxx,info->atime,info->asize);
}
else if(!strcmp(argv1,"file")&&info->rwxx[1]=='f'){
sumcnt2++;
sumsize2+=info->asize;
printf("%5ld: %-10s %s %s %8ld\33[0m\n",info->fileno,info->filename,info->rwxx,info->atime,info->asize);
}
else if(p){
sumcnt2++;
sumsize2+=info->asize;
printf("%5ld: %-10s %s %s %8ld\33[0m\n",info->fileno,info->filename,info->rwxx,info->atime,info->asize);
}
info=info->next;
}
printf("\nカレントディレクトリの総数は %ld でファイルの総和は %ld\n",sumcnt1,sumsize1);
printf("検索ワードは %s\n検索ワードの総数は %ld でファイルの総和は %ld\n",argv1,sumcnt2,sumsize2);
}
if(d_size<0){
perror("getdents");
j--;
return 0;
}
}
char *search(char *text,char *key){
int m,n;
char *p;
m=strlen(text);
n=strlen(key);
for(p=text;p<=text+m-n;p++){
if(strncmp(p,key,n)==0) return p;
}
return NULL;
}
void timecpy(char a[AMAX],char b[AMAX]){
a[ 0]='\33';
a[ 1]='[';
a[ 2]='3';
a[ 3]='1'+b[23]%5;
a[ 4]='m';
a[ 5]=b[20];
a[ 6]=b[21];
a[ 7]=b[22];
a[ 8]=b[23];
a[ 9]='/';
a[10]='\33';
a[11]='[';
a[12]='3';
if(b[4]=='J'&&b[5]=='a') a[13]='1';
else if(b[4]=='F'&&b[5]=='e') a[13]='2';
else if(b[4]=='M'&&b[6]=='r') a[13]='3';
else if(b[4]=='A'&&b[5]=='p') a[13]='4';
else if(b[4]=='M'&&b[6]=='y') a[13]='5';
else if(b[4]=='J'&&b[5]=='u'&&b[6]=='n') a[13]='6';
else if(b[4]=='J'&&b[5]=='u'&&b[6]=='l') a[13]='1';
else if(b[4]=='A'&&b[5]=='u') a[13]='2';
else if(b[4]=='S'&&b[5]=='e') a[13]='3';
else if(b[4]=='O'&&b[5]=='c') a[13]='4';
else if(b[4]=='N'&&b[5]=='o') a[13]='5';
else if(b[4]=='D'&&b[5]=='e') a[13]='6';
else a[13]='1';
a[14]='m';
a[15]=b[4];
a[16]=b[5];
a[17]=b[6];
a[18]='/';
a[19]='\33';
a[20]='[';
a[21]='3';
a[22]='1'+b[9]%5;
a[23]='m';
if(b[8]==' ') a[24]='0';
else a[24]=b[8];
a[25]=b[9];
a[26]='\33';
a[27]='[';
a[28]='3';
if(b[0]=='S'&&b[1]=='u') a[29]='1';
else if(b[0]=='S'&&b[1]=='a') a[29]='2';
else if(b[0]=='M') a[29]='2';
else if(b[0]=='T'&&b[1]=='u') a[29]='3';
else if(b[0]=='T'&&b[1]=='h') a[29]='6';
else if(b[0]=='W') a[29]='4';
else if(b[0]=='F') a[29]='5';
else a[29]='1';
a[30]='m';
a[31]='(';
a[32]=b[0];
a[33]=b[1];
a[34]=b[2];
a[35]=')';
a[36]='\33';
a[37]='[';
a[38]='3';
a[39]='1'+b[12]%5;
a[40]='m';
a[41]=b[11];
a[42]=b[12];
a[43]=b[13];
a[44]='\33';
a[45]='[';
a[46]='3';
a[47]='1'+b[15]%5;
a[48]='m';
a[49]=b[14];
a[50]=b[15];
a[51]=b[16];
a[52]='\33';
a[53]='[';
a[54]='3';
a[55]='1'+b[18]%5;
a[56]='m';
a[57]=b[17];
a[58]=b[18];
a[59]='\0';
if(b[0]==' ') strcpy(a," \33[31mファイルがありません ");
}
struct node *node_create()
{
struct node *from;
int size;
size=sizeof(struct node);
from = (struct node*)malloc(size);
if(!from){
printf("out of memory ¥n");
exit(0);
}
from->next=NULL;
from->back=NULL;
from->fileno=0;
strcpy(from->filename,"");
strcpy(from->atime,"");
from->asize=0;
return from;
}
struct node *shojun(struct node *temp)
{
struct node *old;
struct node *now;
now=stt;
old=NULL;
if(!last){
temp->next=NULL;
temp->back=NULL;
last =temp;
return temp;
}
while(now){
if(strcmp(now->filename,temp->filename) < 0){
old=now;
now=now->next;
}
else{
if(old){
old ->next=temp;
now->back=temp;
temp->next=now;
temp->back=old;
return stt;
}
else{
temp->next=now;
now->back=temp;
temp->back=NULL;
return temp;
}
}
}
last->next=temp;
temp->back=last;
temp->next=NULL;
last =temp;
return stt;
}
void rwx(char a[AMAX],long b){
strcpy(a,"_________________");
if((b&0x8000)==0x8000) a[1]='f';
if((b&0x4000)==0x4000) a[0]='d';
/*
if((b&0x2000)==0x2000) a[2]='c';
if((b&0x1000)==0x1000) a[3]='d';
if((b&0x0800)==0x0800) a[4]='e';
if((b&0x0400)==0x0400) a[5]='f';
if((b&0x0200)==0x0200) a[6]='g';
*/
if((b&0x0100)==0x0100) a[3]='r';
if((b&0x0080)==0x0080) a[4]='w';
if((b&0x0040)==0x0040) a[5]='x';
if((b&0x0020)==0x0020) a[6]='r';
if((b&0x0010)==0x0010) a[7]='w';
if((b&0x0008)==0x0008) a[8]='x';
if((b&0x0004)==0x0004) a[9]='r';
if((b&0x0002)==0x0002) a[10]='w';
if((b&0x0001)==0x0001) a[11]='x';
a[12]=0;
}
2013年7月18日木曜日
英大文字を小文字に、小文字を大文字にするアセンブラ(dynabook AZ)
/*ひな型Hello*/
#include <stdio.h>
main(){
char s[100]=" ";
char s1[20]="%s";
char s2[20]="%s\n";
char s3[20]=" input: ";
char s4[20]="output: %s\n";
int i;
/*
s[0]=0;
s1[0]=0;
s2[0]=0;
s3[0]=0;
s4[0]=0;
*/
asm(" add r0,r7,#0");
asm(" add r1,r7,#40");
asm(" bl printf");
asm(" add r0,r7,#0");
asm(" add r1,r7,#80");
asm(" bl __isoc99_scanf");
asm(" mov r5,#0");
asm(" b T2");
asm("T5: ");
asm(" add r2,r7,#80");
asm(" ldrb r4,[r2,r5]");
asm(" cmp r4,#64");
asm(" bls T3");
asm(" cmp r4,#90");
asm(" bhi T3");
asm(" adds r4,r4,#32");
asm(" strb r4,[r2,r5]");
asm(" b T4");
asm("T3: ");
asm(" cmp r4,#96");
asm(" bls T4");
asm(" cmp r4,#122");
asm(" bhi T4");
asm(" subs r4,r4,#32");
asm(" strb r4,[r2,r5]");
asm("T4: ");
asm(" adds r5,r5,#1");
asm("T2: ");
asm(" add r2,r7,#80");
asm(" ldrb r4,[r2,r5]");
asm(" cmp r4,#0");
asm(" bne T5");
asm(" add r0,r7,#60");
asm(" add r1,r7,#80");
asm(" bl printf");
}
英大文字を小文字に、小文字を大文字にするプログラム
/*ひな型Hello*/
#include <stdio.h>
main(){
char s[100]=" ";
char s1[20]="%s";
char s2[20]="%s\n";
char s3[20]=" input: ";
char s4[20]="output: %s\n";
int i;
printf(s1,s3);
scanf(s1,s);
i=0;
while(s[i]!='\0'){
if(0x41<=s[i]&&s[i]<=0x5a) s[i]+=32;
else if(0x61<=s[i]&&s[i]<=0x7a) s[i]-=32;
i++;
}
printf(s4,s);
}
2013年7月9日火曜日
where grep プログラム
grepみたいなものを自分で作ったよん
netwalkerでは何故か動かなかったけど
dynabookAZでは動いた
実行例:
/usr/include内でatoiという関数がどのファイルに
あるか調べる
結果はstdlib.h
プログラム名は、whg(whg.c)
akira@akira-laptop:~/ii1302$ whg
検索する場所:/usr/include
ss=/usr/include
サブディレクトリも検索する[y/n]:n
サブディレクトリは検索しない
検索する言葉:atoi
tt=atoi
0001: 147行 extern int atoi (const char *__nptr) [/usr/include/stdlib.h]
0002: 278行 __NTH (atoi (const char *__nptr)) [/usr/include/stdlib.h]
akira@akira-laptop:~/ii1302$
akira@akira-laptop:~$ cat whg.c
#include <sys/syscall.h>
#include <unistd.h>
#ifdef __linux__
# include <linux/types.h>
/* # include <linux/dirent.h> */
# include <linux/unistd.h>
# include <errno.h>
#else
# include <dirent.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
struct dirent {
long d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[256];
};
struct stat buf2;
char *search(char *text,char *key);
int kensaku(char *ss);
long cnt=0;
char tt[100];
int j;
int ynflg;
int overflg=0;
int main(){
int i,im,d_size;
int fd;
char buf[4096],ch;
char ss[500],*p;
char yn[20];
printf("検索する場所:");
ch=0; im=0;
while(ch!='\n'){
ch=getchar();
if(ch!='\n'){
ss[im]=ch;
im++;
}
}
ss[im]='\0';
if(strcmp(ss,"")==0) strcpy(ss,".");
printf("ss=%s\n",ss);
printf("サブディレクトリも検索する[y/n]:");
ch=0; im=0;
while(ch!='\n'){
ch=getchar();
if(ch!='\n'){
yn[im]=ch;
im++;
}
}
yn[im]='\0';
if(yn[0]=='n'||yn[0]=='N') ynflg=0;
else ynflg=1;
if(ynflg==1) printf("サブディレクトリも検索\n");
if(ynflg==0) printf("サブディレクトリは検索しない\n");
printf("検索する言葉:");
ch=0; im=0;
while(ch!='\n'){
ch=getchar();
if(ch!='\n'){
tt[im]=ch;
im++;
}
}
tt[im]='\0';
printf("tt=%s\n",tt);
printf("\n");
j=1;
kensaku(ss);
}
int kensaku(char *ss){
long gyo;
int i,im,d_size,k,pos;
int fd;
char buf[4096],ss1[100][500];
char *p,text[4096],q;
FILE *fp;
j++;
/*printf("j=%d ss=%s\n",j,ss);*/
if(cnt>=100){ goto OVER200; }
if((fd=open(ss,O_RDONLY))<0){
perror("open");
j--;
return 1;
}
while((d_size=syscall(SYS_getdents,fd,(struct dirent *)&buf,sizeof buf))>0){
for(i=0;i<d_size;i+=((struct dirent *)&buf[i])->d_reclen){
strcpy(ss1[j],ss);
strcat(ss1[j],"/");
strcat(ss1[j],((struct dirent *)&buf[i])->d_name);
if(stat(ss1[j],&buf2)<0){
perror("stat");
j--;
return 1;
}
if((buf2.st_mode&0xf000)==0x4000&&
ss1[j][strlen(ss1[j])-1]!='.'&&
/* 検索対象外を予め作っておく */
strcmp(ss1[j],"./processing")!=0&&
strcmp(ss1[j],"./src/mozc/src")!=0&&
strcmp(ss1[j],"./depot_tools")!=0&&
strcmp(ss1[j],"./mozc-tmp/mozc-ut-1.1.773.102")!=0&&
strcmp(ss1[j],"./mozc-tmp/mozcdic-ut-20110803")!=0&&
strcmp(ss1[j],"./ダウンロード/mozc_test1")!=0&&
strcmp(ss1[j],"./.mozilla/firefox")!=0&&
strcmp(ss1[j],"./.gconf/apps")!=0&&
strcmp(ss1[j],"./.libreoffice")!=0&&
strcmp(ss1[j],"./gtk")!=0&&
strcmp(ss1[j],"./.cache")!=0&&
strcmp(ss1[j],"./.local")!=0&&
strcmp(ss1[j],"./.config")!=0&&
strcmp(ss1[j],"./kde")!=0){
/* 検索対象外を予め作っておく、ここまで */
k=0;
if(ynflg==1) k=kensaku(ss1[j]);
if(k==1){ j--; return 1;}
}
fp=fopen(ss1[j],"r");
if(fp!=NULL){
gyo=1;
while( (q=getc(fp)) != 0xff){
if(q=='\n'){
text[pos]='\0';
p=search(text,tt);
if(p!=NULL&&cnt<100){
cnt++;
printf("%04ld: %ld行 %s [%s]\n",cnt,gyo,text,ss1[j]);
}
pos=0;
gyo++;
}
else{
if(pos>=4096) break;
if(q!='\r') text[pos++]=q;
}
}
text[pos]='\0';
}
else return 2;
fclose(fp);
}
if(cnt>=100){
if(overflg==0) printf("検索数が100を超えるので中止します\n");
overflg=1;
goto OVER100; }
}
OVER100:
if(d_size<0){
perror("getdents");
j--;
return 1;
}
OVER200:
j--;
return 0;
}
char *search(char *text,char *key){
int m,n;
char *p;
m=strlen(text);
n=strlen(key);
for(p=text;p<=text+m-n;p++){
if(strncmp(p,key,n)==0) return p;
}
return NULL;
}
akira@akira-laptop:~$
2013年7月7日日曜日
修正アルファベット表示プログラム
一番最後の#4と#24逆にしたらよかったのね
#include <stdio.h>
main(){
char s[100]=" ";
char s1[20]="%s\n";
asm(" mov r3,#65");
asm(" mov r4,#26");
asm(" mov r5,#50");
asm("T1:");
asm(" sub r6,r5,r4");
asm(" strb r3,[r7,r6]");
asm(" add r3,r3,#1");
asm(" subs r4,r4,#1");
asm(" bne T1");
asm(" mov r3,#97");
asm(" mov r4,#26");
asm(" mov r5,#79");
asm("T2:");
asm(" sub r6,r5,r4");
asm(" strb r3,[r7,r6]");
asm(" add r3,r3,#1");
asm(" subs r4,r4,#1");
asm(" bne T2");
asm(" adds r0,r7,#4");
asm(" adds r1,r7,#24");
asm(" bl printf");
}
gcc -S 130707D.c -lm
gcc -o 130707D 130707D.c -lm
./130707D
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
何かキーを押してください
アルファベット表示プログラム
dynabook AZ de assembler sample:
不完全です。最後の方の#10には触れないでください
#include <stdio.h>
main(){
char s[100]=" ";
char s1[20]="%s\n";
asm(" mov r3,#65");
asm(" mov r4,#26");
asm(" mov r5,#50");
asm("T1:");
asm(" sub r6,r5,r4");
asm(" strb r3,[r7,r6]");
asm(" add r3,r3,#1");
asm(" subs r4,r4,#1");
asm(" bne T1");
asm(" mov r3,#97");
asm(" mov r4,#26");
asm(" mov r5,#79");
asm("T2:");
asm(" sub r6,r5,r4");
asm(" strb r3,[r7,r6]");
asm(" add r3,r3,#1");
asm(" subs r4,r4,#1");
asm(" bne T2");
asm(" mov r3,#10");
asm(" strb r3,[r7,#79]");
asm(" adds r0,r7,#24");
asm(" adds r1,r7,#4");
asm(" bl printf");
}
不完全です。最後の方の#10には触れないでください
#include <stdio.h>
main(){
char s[100]=" ";
char s1[20]="%s\n";
asm(" mov r3,#65");
asm(" mov r4,#26");
asm(" mov r5,#50");
asm("T1:");
asm(" sub r6,r5,r4");
asm(" strb r3,[r7,r6]");
asm(" add r3,r3,#1");
asm(" subs r4,r4,#1");
asm(" bne T1");
asm(" mov r3,#97");
asm(" mov r4,#26");
asm(" mov r5,#79");
asm("T2:");
asm(" sub r6,r5,r4");
asm(" strb r3,[r7,r6]");
asm(" add r3,r3,#1");
asm(" subs r4,r4,#1");
asm(" bne T2");
asm(" mov r3,#10");
asm(" strb r3,[r7,#79]");
asm(" adds r0,r7,#24");
asm(" adds r1,r7,#4");
asm(" bl printf");
}
実行結果
gcc -S 130707C.c -lm
gcc -o 130707C 130707C.c -lm
./130707C
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
何かキーを押してください
dynabookAZを手に入れてアセンブラ再開するのだ
ダイナブックAZでアセンブラします
#include <stdio.h>
main(){
char s[20]="aaaaa";
char s1[20]="%s\n";
s[2]='E';
printf(s1,s);
}
これをインラインアセンブラにすると
#include <stdio.h>
main(){
char s[20]="aaaaa";
char s1[20]="%s\n";
asm(" movs r3,#69");
asm(" strb r3,[r7,#7]");
asm(" add r0,r7,#24");
asm(" adds r1,r7,#4");
asm(" bl printf");
}
strb r3,[r7,#7]の#7を5とか6とかにいじってコンパイルしてみてね
登録:
投稿 (Atom)