请问谁能帮忙讲解一下这道程序吗!萌新想起来有点绕!谢谢! 我想请教一下有关汇编语言延时子程序的问题?下面的子程序有点看...

\u6c42\u52a9\u5404\u4f4d\u9ad8\u624b\uff0c\u5e2e\u5fd9\u89e3\u91ca\u4e00\u4e0b\u8fd9\u4e2a\u7a0b\u5e8f\uff0c\u8be6\u7ec6\u70b9\u66f4\u597d\uff0c\u8fd8\u6709\u540e\u9762\u7684while(!s3);\u8bed\u53e5\uff0c\u4e00\u76f4\u770b\u4e0d\u660e\u767d\u4ec0\u4e48\u610f\u601d\u3002

void keycan1()
{
uint i; //\u58f0\u660e\u4e00\u4e2aunsigned int\u7c7b\u578b\u7684\u53d8\u91cfi
if(s3==0)
{
delay(30); //\u5f53S3\u7b49\u4e8e0\u7684\u65f6\u5019\u6267\u884c\u5ef6\u65f6\u51fd\u6570delay(30);
if(s3==0)
{ i++; //\u5f53S3\u7b49\u4e8e0\u7684\u65f6\u5019i\u7684\u503c\u52a01
switch(i)
{
case 1: //\u6839\u636eI\u7684\u503c\u6765\u9009\u62e9\u5c06\u8d4b\u4e88P216\u8fdb\u5236\u7684\u6570\u636e
P2=0x7f;
break;
case 2:
P2=0xbf;
break;
case 3:
P2=0xdf;
break;
case 4:
P2=0xef;
break;
case 5:
P2=0xf7;
break;
case 6:
P2=0xfb;
break;
case 7:
P2=0xfd;
break;
case 8:
P2=0xfe;
break;
default:i=0;
}
while(!s3); //\u5f53!S3\u4e3a\u771f\u7684\u65f6\u5019\uff0c\u5373S3\u4e3a\u5047\u7684\u65f6\u5019\u6267\u884c\u7a7a\u8bed\u53e5
}
}

\u8fd9\u4e2a\u4ee3\u7801\u5176\u5b9e\u8fd8\u662f\u5f88\u6e05\u695a\u660e\u4e86\u7684\u3002
DELY1:PUSH AX\u3000\uff1b\u5ef6\u65f6\u5b50\u7a0b\u5e8f\uff0c\u8fd9\u91ccPUSH AX \u5176\u5b9e\u53ef\u4ee5\u4e0d\u8981\u7684\uff0c\u56e0\u4e3aAX\u6ca1\u6709\u505a\u4efb\u4f55\u6539\u52a8
PUSH CX ; \u56e0\u4e3a\u4f7f\u7528\u4e86CX\u6765\u8ba1\u6570\uff0c\u6240\u4ee5\u5148\u4fdd\u5b58CX\u8fdb\u5806\u6808
MOV CX,30H ; \u5faa\u73af30H\u4e5f\u5c31\u662f48\u6b21
DLY1:CALL DELY2 ; \u5728\u6b21\u8c03\u7528\u4e00\u4e2a\u5ef6\u65f6\u5b50\u7a0b\u5e8f
LOOP DLY1 ; \u5faa\u73af\uff0c48\u6b21\uff0c\u4e0d\u5230\u6b21\u6570\u5219\u7ee7\u7eed\u5faa\u73af
POP CX ; \u6062\u590d\u88ab\u4fdd\u62a4\u7684\u539f\u6765CX\u7684\u503c
POP AX ; \u6062\u590d\u88ab\u4fdd\u62a4\u7684\u539f\u6765AX\u7684\u503c
RET ; \u8fc7\u7a0b\u8fd4\u56de
DELY2:PUSH CX ; \u5185\u90e8\u8c03\u7528\u7684\u8fc7\u7a0b\uff0c\u4e5f\u9700\u8981\u628aCX\u5f53\u524d\u7684\u503c\u4fdd\u62a4\u8fdb\u5806\u6808
MOV CX,8000H ; \u5faa\u73af8000H\u4e5f\u5c31\u662f32768\u6b21
LOOP $ ; $ \u8868\u793a\u5f53\u524d\u5730\u5740\uff0c\u4e5f\u5c31\u662f\u81ea\u5df1\u7684\u5730\u5740\uff0c32768\u6b21\u5faa\u73af\u4e0d\u5230\u5219\u539f\u5730\u8e0f\u6b65
POP CX ; \u6062\u590d\u88ab\u4fdd\u62a4\u7684CX\u7684\u503c
RET ; \u8fc7\u7a0b\u8fd4\u56de

解答如下:

注:解答中使用的形如a->a=5的语句,翻译为:指针a指向整型变量a,整型变量a=5

文字版如下:

#include<stdio.h>

void fun(int *a, int *b, int *c)

{

//此处形参a,b,c就相当于指针p1,p2,p3

int *t;//⑤定义了一个指针变量t

t = a; a = b; b = t;//⑥另说

*t = *b; *b = *c; *c = *t;//⑦另说

printf("%d%d%d
", *a, *b, *c);//⑧分别输出指针a,b,c所对应的值:7,3,3

//⑨fun执行结束,转到main函数

}

int main()

{

//①程序从main函数开始执行

int a = 5, b = 7, c = 3;//②定义了三个整型变量a,b,c并分别赋值5,7,3

int *p1 = &a, *p2 = &b, *p3 = &c;//③定义了三个指针p1,p2,p3分别指向变量a,b,c

fun(p1, p2, p3);//④将p1,p2,p3作为实参传入函数fun,转到fun执行

printf("%d%d%d", a, b, c);//⑩输出a,b,c的值,3,7,3

}

/*

⑤a->a=5  b->b=7  c->c=3  t

⑥t->a=5  a->b=7  b->a=5  c->c=3此时*t=5,*a=7,*b=5,*c=3

⑦*t=*b执行后*t=5,*b=*c执行完后*b=3(注意此时指针b是指向整型变量a的,*b=3时就将整型变量a的值更改为了3,即a=3)

执行*c=*t后*c=3(由⑥可知t和b同时指向a,而a已经变为了3,所以*t也为3)

至此:*a=7,*b=3,*c=3,而整型变量a=3,b=7,c=3

*/



把函数中*t=*b;*b=*c;*c=*t;这段注释掉前后对比下,应该就理解的差不多啦:



#include<stdio.h>

void fun(int *a,int *b,int *c)

{

    int *t;

    t=a;     // *t = 5;

    a=b;     // *a = 7

    b=t;     // *b = 5, b, t指向同一个地址初识a的地址

    *t=*b;     // *t = *b = 5

    *b=*c;     // *b = 3, 因为b, t 指向同一个地址所以*t = 3

    *c=*t;     // *c = 3

    printf("%d%d%d
",*a,*b,*c);     // *a = 7; *b = 3; *c=3

}



#include<stdio.h>
void fun(int *a,int *b,int *c)//&a,&b,&c ==>对应5,7,3
{
int *t;
t=a;//t = &a;
a=b;//a = &b;
b=t;//b = &a; 在这三步之后并没有交换main函数中的值,只是形参传入顺序变为a = &b,b = &a,c = &c
*t=*b; //*t = *b = *(&a) = 5
*b=*c;//*b = *(&c) = 3 由于t与b指向同一段内存,所以*t = 3 ==>>main函数中a等于3
*c=*t;//*c = 3 ==>>main函数中的c等于3
printf("%d%d%d\n",*a,*b,*c);//由于a保存的是b的地址,所以*a = 7,*b被赋值为3,*c被赋值为3
}
int main()
{
int a=5,b=7,c=3;
int *p1=&a,*p2=&b,*p3=&c;
fun(p1,p2,p3);//&a,&b,&c
printf("%d%d%d",a,b,c);//输出3,7,3
}
所以最终输出:7 3 5
3 7 5

#include<stdio.h>
void fun(int *a,int *b,int *c)
{
int *t;
t=a;
a=b;
b=t;
/* 上面几条语句:
* 指针a与b的交换,也就是说 现在 a == p2, b == p1, c 不变== p3
* *a == 7
* *b==5
* *c==3
* b和t 指向是同一个地址
* */

*t=*b; // 这条语句相当于啥也没干,因为 t 和 b 的 地址一样 相当于 *b==*b
*b=*c; // 现在 b和 t 的内容 == *c == 3 也就是原来的 因为b==p1 所以 指针p1的内容*p1==3
*c=*t; // 经过上面那个语句,*t的值自然==3 赋值后 *c 也==3了 c一直没有被动过,所以 c 和p3一直指向同一块内存,改变内容后,*c ==*p3==3

printf("%d%d%d\n",*a,*b,*c);
}
int main()
{
int a=5,b=7,c=3;
int *p1=&a,*p2=&b,*p3=&c;
fun(p1,p2,p3);
printf("%d%d%d",a,b,c);
}

  • 璇烽棶璋佽兘甯繖璁茶В涓涓嬭繖閬撶▼搴忓悧!钀屾柊鎯宠捣鏉ユ湁鐐圭粫!璋㈣阿!
    绛旓細瑙g瓟濡備笅锛氭敞锛氳В绛斾腑浣跨敤鐨勫舰濡俛->a=5鐨勮鍙ワ紝缈昏瘧涓猴細鎸囬拡a鎸囧悜鏁村瀷鍙橀噺a,鏁村瀷鍙橀噺a=5 鏂囧瓧鐗堝涓嬶細include<stdio.h> void fun(int *a, int *b, int *c){ //姝ゅ褰㈠弬a,b,c灏辩浉褰撲簬鎸囬拡p1,p2,p3 int *t;//鈶ゅ畾涔変簡涓涓寚閽堝彉閲弔 t = a; a = b; b = t;//鈶ュ彟璇 t = ...
  • 璋佽兘鎶婂叕鍔″憳闈㈣瘯鐨勫嚑閬撶▼搴璇︾粏浠嬬粛涓涓?
    绛旓細鍏姟鍛橀潰璇曟祦绋嬶細锛堜竴锛夐潰璇曟姤鍒版娊绛捐冪敓涓鑸渶瑕佹彁鍓10-30鍒嗛挓鍒拌揪鎸囧畾鍦扮偣鎶ュ埌锛岃冭瘯宸ヤ綔浜哄憳鏍稿鑰冪敓韬唤璇佸拰闈㈣瘯閫氱煡涔︾瓑鐩稿叧璇佷欢銆備箣鍚庯紝鑰冪敓鎶界纭畾鍒嗙粍鍜岃繘鍦洪『搴忥紝鏈夌殑鍦板尯鏄厛鎶藉垎缁勭锛屽啀鎶介『搴忕锛屾湁鐨勫湴鍖烘槸涓娆℃娊鍙栫‘瀹氬垎缁勫拰椤哄簭锛屽锛氫笁锛1锛夛紝琛ㄧず绗笁缁勭1涓繘鍦恒備釜鍒湴鍖猴紝濡備腑澶浗瀹舵満...
  • 姹侰璇█澶х璁茶В涓涓嬭繖涓▼搴绠楁硶鐨勬剰鎬,灏辨槸涓轰粈涔堣杩欐牱绠??鎴戣兘鐪...
    绛旓細1銆佸鏋渁闄や互b鐨勪綑鏁颁负r锛屽晢涓簈锛屽垯鍙互琛ㄧず鎴 a = q*b + r锛屼笅闈㈣瘉鏄庯細(a,b) = (b,r)濡傛灉d涓篴鍜宐鐨勬渶澶у叕绾︽暟锛屽垯鐢盿 = q*b + r 鐭ワ紝d鑳芥暣闄ょ瓑寮忕殑宸︿晶锛岄偅涔堜篃蹇呯劧鑳芥暣闄ょ瓑寮忕殑鍙充晶锛屾棦鐒禿鑳芥暣闄*b + r涓旀槸 b鐨勭害鏁帮紝鎵浠涔熻兘鏁撮櫎r锛屽嵆d鏄痓鍜宺鐨勭害鏁般傚悓鐞嗗彲浠ヨ瘉鏄...
  • 璇锋暀鍚勪綅瀛﹂湼,鑳藉府蹇鍒嗘瀽涓涓嬭繖閬c璇█绋嬪簭鍚?澶氳阿
    绛旓細绗笁绌猴細s+=m%10;//s鏄绠楀悇浣嶆暟瀛楃殑鍜屻
  • 璋佽兘甯鎴戝垎鏋杩欓亾c璇█绋嬪簭棰樺悧?
    绛旓細5,6,7,8,9,0,1,2,3,4銆備粩缁嗙湅鍑芥暟灏辫锛屾棤闈炲氨鏄釜浜ゆ崲鍑芥暟锛屽厛0-3浜ゆ崲锛岀劧鍚4-9锛屾渶鍚0-9,銆
  • 姹傞珮鎵嬬粰鎴璁鐐涓涓嬭繖閬撶▼搴!C璇█
    绛旓細/ 杩愯浜嗕竴涓嬬粨鏋滄暟 杈撳嚭 k=4 鍦╟閲岄潰瀛楃涓叉槸鍙互杞崲鎴愭暣褰㈡暟鎹繘琛岃繍绠楃殑銆俢+1閭d箞瀛楃'A'灏卞彉鎴愪簡'B'褰撳瓧绗︿覆灏忎簬'G'鏄氨涓鐩磋繘琛屽惊鐜紝鐩磋嚦瀛楃c绛変簬'G鏄粨鏉熷惊鐜篃灏辨槸c澧炲ぇ浜6;鐜板湪浣犲簲璇ヨ兘鐪嬫噦浜嗗惂 / include<stdio.h> main(){ int k=0;char c='A';do { switch(c++){ ...
  • 姹傚ぇ绁炵湅涓涓嬭繖鍑閬撶▼搴棰,瑙i噴涓涓嬭緭鍑虹粨鏋淨AQ鑷Java濂藉涓嶅お鎳,姹...
    绛旓細1.绗竴涓噷杈圭殑detx鏂规硶娌℃湁鍔爐his锛屾墍鏈夊垱寤哄璞″悗鏄笉鑳戒紶鍊肩殑锛屾墍浠灏辩瓑浜巆lassA閲岀殑鍒濆鍊硷紝鑰寉灏卞彲浠ヤ紶鍊硷紝y灏辩瓑浜巆lassB閲岀殑-200锛屾渶鍚庡姞璧锋潵灏辨槸-100 2.杩欎釜姣旇緝澶嶆潅锛屾秹鍙婁簡String鍜孲tringbuffer鐨勬柟娉曪紝浣犲彧瑕佹槑鐧介鐩殑鎰忔濇槸杩斿洖鑳芥暣闄2鐨勬墍鏈変笅鏍囨暟鐨勫瓧绗︿覆锛屼笅鏍囦粠0寮濮 3.杩欎釜灏辨洿...
  • 姹甯繖瑙g瓟涓涓嬭繖閬棰,璇︾粏涓鐐,杩樻湁杩欎釜绋嬪簭鐨勫姛鑳芥槸浠涔
    绛旓細杩欐绋嬪簭鐨勬湰鎰忔槸灏哛0寮濮嬬殑100涓瘎瀛樺櫒娓0 锛屼絾鐢变簬寮濮婻0璧嬪间负00H锛岃岃鏁扮敤鐨勬槸R1锛屾墍浠ュ皢杈句笉鍒版湡鏈涚殑鏁堟灉銆傚惊鐜涓娆″彲浠ラ『鍒╂墽琛岋紝绗簩娆″惊鐜疪1琚竻0锛屾帴鐫鎵ц鍑1鎸囦护锛孯1缂栫▼255锛屾墍浠jne r1,( ),loop涓濉叆涓涓傚綋鐨勫硷紝鍙互淇濊瘉100娆″惊鐜紝杩欎釜鏁版槸256-98.
  • 甯繖瑙涓嬭繖閬撶▼搴棰,璋㈣阿浜
    绛旓細绗竴棰橈細 鍥犱负涓诲嚱鏁伴噷鐨刴=3 鎵浠or ( i=0; i<m; i++) 杩欐潯璇彞鑳芥墽琛3娆★紝鍗砳=0,1,2鐨勬椂鍊欍傚綋i=0鏃,璋冪敤F(I)鍑芥暟锛堝嵆n=0锛夛紝鍥犱负i鐨勫垵鍊兼槸1鎵浠>n锛屼笉婊¤冻i<=n銆傛墍浠绋嬪簭杩斿洖s鐨勫垵濮嬪1锛屽洖鍒颁富鍑芥暟鎵цa+=f(i); 姝ゆ椂a=1锛屽綋i=1鏃,璋冪敤F(I)鍑芥暟锛堝嵆n=1锛夛紝...
  • 杩欓亾C绋嬪簭鐨勯鎴戝畬鍏ㄧ湅涓嶆噦鍛,璇甯鎴戣В閲涓涓濂藉悧
    绛旓細瀹氫箟浜嗗嚱鏁癆VR閲岄潰鏈変袱涓彉閲弜锛寉銆傚嚱鏁板唴瀹 鏄紙x锛媦锛/2 涓嬮潰瀹氫箟浜嗕笁涓暣褰㈠彉閲忥紝i锛宩锛宬 灏唜锛漣锛寉锛漥锛屽甫鍏ュ嚱鏁癆VR涓绠 锛2+21锛/2锛11.5 鍐嶄箻浠10
  • 扩展阅读:扫题免费讲解软件 ... 作业帮免费扫一扫 ... 手机扫一扫解题 ... 免费解题扫一扫 ... 扫一扫出答案 ... 万能答题软件扫一扫 ... 一秒拍照答题 ... 百度扫一扫做题 ... 免费作业拍照出答案 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网