程序开发习题汇编语言 (模拟)解析。
思路:通过程序模块化,不要全写在main里面。实现变量的赋值和拷贝函数。
代码如下:
#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; string op[12] = { "AX","BX","CX","DX","AH","BH","CH","DH","AL","BL","CL","DL" }; ll A[15], N; const ll Mod = 256; int GetNum(string str) { for (int i = 0; i<12; ++i) { if (str == op[i]) return i; } return -1; } void init() { memset(A, 0, sizeof(A)); } void Change(string s, ll v) { int num = GetNum(s); int l, m, r; if (num < 4) { l = num, m = num + 4, r = num + 8; A[l] = v; A[m] = v / Mod; A[r] = v % Mod; } else if (num < 8) { l = num - 4, m = num, r = num + 4; A[m] = v; A[l] = A[m] * Mod + A[r]; } else { l = num - 8, m = num - 4, r = num; A[r] = v; A[l] = A[m] * Mod + A[r]; } } void Copy(string s, string p) { int r = GetNum(p); ll v = A[r]; Change(s, v); } bool isnum(char ch) { if ('0' <= ch && ch <= '9') return true; return false; } ll Transform(string str) { int len = (int)str.length(); char last = str[len - 1]; ll res = 0; if (last == 'B') { for (int i = 0; i> T; while (T--) { init(); cin >> N; string str, AA, BB; for (int i = 1; i <= N; ++i) { cin >> str; if (str == "MOV") { string temp; cin >> temp; int pos = 0; AA.clear(), BB.clear(); for (pos = 0; pos> temp; int pos = 0; AA.clear(), BB.clear(); for (pos = 0; pos> BB; int pos = GetNum(BB); if (pos < 4) { ll v = A[pos]; ll res = v * A[0]; Change("DX", res / (Mod*Mod)); Change("AX", res % (Mod*Mod)); } else { ll v = A[pos]; ll res = v * A[8]; Change("AX", res); } } } for (int i = 0; i<4; ++i) { cout << A[i]; if (i != 3) cout << " "; else cout << endl; } } return 0; }
关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心
版权所有: 红黑联盟--致力于做实用的IT技术学习网站