1076: 汇编语言

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 34  Solved: 4
[Submit][Status][Web
Board
]

Description

Input

Output

Sample Input

2
3
MOV AX,2
MOV BX,3
ADD AX,BX
6
MOV AX,2
MOV BX,030H
MOV CX,11B
ADD AX,CX
ADD DL,CL
MUL DL

Sample Output

5 3 0 0
15 48 3 3

HINT

注意在 MOV 和 ADD 操作中,指令的两个操作对象的位数应当是一致的,即不会出现如 MOV AX,BL

或 ADD AL,0100H 这样错误的指令。

在初始状态下,四个通用寄存器中的数值均为 0。给定一系列的汇编指令,请输出按顺序执行完所

有指令后四个通用寄存器中的数值。

这题真的没啥好说。很无语....从省赛选拔赛开始到现在一直WA,直到找了老师要了后台数据(对自己真的无语了),发现两个问题:

1、给一个变量赋值时会先计算,再赋值,比如我原来代码的long long val = 655535 * 65535,首先计算右边的值,由于还没有赋值给val,因此范围仍然在int内,四十亿的数据直接把int给炸飞了,将溢出之后的结果-131071赋给了val,因此原本的输出出现了负数。

2、低八位和高八位的寄存器可以互相作用,比如将AL加或赋值给CH,之前的判断中以为只能是低位与低位操作,高位与高位操作。

大小号总计WA十余次(递归懵比.jpg,本垃圾错了.jpg)。
爆炸代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<sstream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
typedef long long LL;
struct poi
{
LL di;
LL gao;
};
inline void change(string &s)
{
for (LL i=0; i<(LL)s.size(); i++)
{
if(s[i]==',')
{
s[i]=' ';
}
}
}
inline LL sto(string s)
{
LL sum=0;
LL i;
LL len=(LL)s.size();
if(s[len-1]=='H'&&s[0]=='0')
{
for (i=0; i<len-1; i++)
{
if(s[i]>='A'&&s[i]<='Z')
sum=sum*16+(s[i]-'A'+10);
else if(s[i]>='a'&&s[i]<='z')
sum=sum*16+(s[i]-'a'+10);
else
sum=sum*16+(s[i]-'0');
}
}
else if(s[len-1]=='B')
{
for (i=0; i<len-1; i++)
sum=sum*2+(s[i]-'0');
}
else
{
for (i=0; i<len; i++)
{
sum=sum*10+(s[i]-'0');
}
}
return sum;
}
int main (void)
{
ios::sync_with_stdio(false);
LL t,n,i,j;
string op,one,two,s;
char c;
cin>>t;
while (t--)
{
cin>>n;
map<LL,poi>list;
list[0].di=list[0].gao=0;
list[1].di=list[1].gao=0;
list[2].di=list[2].gao=0;
list[3].di=list[3].gao=0;
cin.get();
for (i=0; i<n; i++)
{
getline(cin,s);
change(s);
istringstream sin(s);
sin>>op>>one;
if(op=="MOV")
{
sin>>two;
if(isdigit(two[0]))
{
LL val=sto(two);
if(one[1]=='H')
list[one[0]-'A'].gao=val;
else if(one[1]=='L')
list[one[0]-'A'].di=val;
else
{
list[one[0]-'A'].di=val%256;
list[one[0]-'A'].gao=val/256;
}
}
else
{
if(one[1]=='H')
{
if(two[1]=='H')
list[one[0]-'A'].gao=list[two[0]-'A'].gao;
else if(two[1]=='L')
list[one[0]-'A'].gao=list[two[0]-'A'].di;
}
else if(one[1]=='L')
{
if(two[1]=='H')
list[one[0]-'A'].di=list[two[0]-'A'].gao;
else if(two[1]=='L')
list[one[0]-'A'].di=list[two[0]-'A'].di;
}
else
{
list[one[0]-'A'].di=list[two[0]-'A'].di;
list[one[0]-'A'].gao=list[two[0]-'A'].gao;
}
}
}
else if(op=="ADD")
{
sin>>two;
if(isdigit(two[0]))
{
LL val=sto(two);
if(one[1]=='H')
list[one[0]-'A'].gao+=val;
else if(one[1]=='L')
list[one[0]-'A'].di+=val;
else
{
val=val+list[one[0]-'A'].gao*256+list[one[0]-'A'].di;
list[one[0]-'A'].di=val%256;
list[one[0]-'A'].gao=val/256;
}
}
else
{
if(two[1]=='L')
{
if(one[1]=='L')
list[one[0]-'A'].di+=list[two[0]-'A'].di;
else if(one[1]=='H')
list[one[0]-'A'].gao+=list[two[0]-'A'].di;
}
else if(two[1]=='H')
{
if(one[1]=='L')
list[one[0]-'A'].di+=list[two[0]-'A'].gao;
else if(one[1]=='H')
list[one[0]-'A'].gao+=list[two[0]-'A'].gao;
}
else
{
LL vall=list[two[0]-'A'].di+list[two[0]-'A'].gao*256+list[one[0]-'A'].di+list[one[0]-'A'].gao*256;
list[one[0]-'A'].di=vall%256;
list[one[0]-'A'].gao=vall/256;
}
}
}
else if(op=="MUL")
{
LL val;
if(one[1]=='L')
{
val=list[one[0]-'A'].di*list[0].di;
list[0].di=val%256;
list[0].gao=val/256;
}
else if(one[1]=='H')
{
val=list[one[0]-'A'].gao*list[0].di;
list[0].di=val%256;
list[0].gao=val/256;
}
else
{
LL v1=(list[0].gao*256+list[0].di)*(list[one[0]-'A'].gao*256+list[one[0]-'A'].di);
list[0].di=v1%65536%256;
list[0].gao=v1%65536/256;
list[3].di=v1/65536%256;
list[3].gao=v1/65536/256;
}
}
}
for (LL i=0; i<4; i++)
{
LL val=list[i].gao*256+list[i].di;
if(i!=3)
cout<<val<<" ";
else
cout<<val<<endl;
}
}
return 0;
}

ACM程序设计选修课——1076汇编语言(重定向+模拟)的更多相关文章

  1. ACM程序设计选修课——1041: XX's easy problem(神烦的多次字符串重定向处理)

    1041: XX's easy problem Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 41  Solved: 7 [Submit][Statu ...

  2. ACM程序设计选修课——1044: (ds:队列)打印队列(queue模拟)

    问题 A: (ds:队列)打印队列 时间限制: 1 Sec  内存限制: 128 MB 提交: 25  解决: 4 [提交][状态][讨论版] 题目描述 网络工程实验室只有一台打印机,它承担了非常繁重 ...

  3. ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)

    1057: Beautiful Garden Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 25  Solved: 12 [Submit][Statu ...

  4. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵 【模拟】

    链接:https://www.nowcoder.com/acm/contest/90/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  5. ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)

    Problem D: (ds:树)合并果子 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 80  Solved: 4 [Submit][Status][ ...

  6. ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)

    问题 E: (ds:图)公路村村通 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...

  7. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  8. ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. ACM程序设计选修课——1018: Common Subsequence(DP)

    问题 L: Common Subsequence 时间限制: 1 Sec  内存限制: 32 MB 提交: 70  解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...

随机推荐

  1. 小技巧:unicode RLO

    unicode 控制字符 RLO 可以将位于其后的文字翻转. 于是可以被病毒利用. 如图 重命名文件,在gpj前插入unicode RLO,之后若不小心,可能会被欺骗,误以为是jpg文件. 如果修改程 ...

  2. Linux增加sudo用户

    1.  root用户编辑文件/etc/sudoers vi /etc/sudoers 2.  按yy复制行root   ALL=(ALL)      ALL 按p粘贴,修改 “root” 为添加的用户 ...

  3. JS事件类型--1

    滚轮事件其实就是一个mousewheel事件,这个事件跟踪鼠标滚轮,类似Mac的触屏版. 一.客户区坐标位置 鼠标事件都是在浏览器视口的特定位置上发生的.这个位置信息保存在事件对象的clientX和c ...

  4. python-下拉框处理

    在自动化中python对下拉框的处理网上相对实例比较少,其它前辈写的教程中对下拉也仅仅是相对与教程来说的,比如下面: m=driver.find_element_by_id("Shippin ...

  5. 用C#(ASP.Net)在Exchange Server环境下发送邮件

    普通的邮件, 用System.Net.Mail 类 或 System.Web.Mail 类 处理即可, 但是Exchange Server 环境下, 这两个类起不了作用-------至少目前我看到的情 ...

  6. Bootstrap 下拉菜单(dropdown)插件

    使用下拉菜单的插件,您可以向任何组件(比如:导航栏,标签页,胶囊式导航,按钮)添加下拉菜单 用法 您可以切换下拉菜单(dropdown)插件隐藏内容 1.通过data属性,向链接或按钮添加data-t ...

  7. C#数组简介

    一.数组的定义 数组:是一种包含若干个变量的数据结构,这些变量可以通过索引进行访问. 数组的元素:数组中的变量就称为数组的元素. 元素类型:数组中的元素具有相同的数据类型,该数据类型就称为数组的元素类 ...

  8. MySQL多源复制

    MySQL多源复制 1. 配置多源复制 1.1 配置环境如下 1.2 从库的重要参数配置 1.3 在Master上导出需要同步的数据库 1.4 在master上创建复制账号 1.5 备份数据导入 1. ...

  9. 如何用纯 CSS 创作一根闪电连接线

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RBjdzZ 可交互视频 ...

  10. Boostrap的自适应功能

    其实理解栅栏模式之后,自适应功能就简单很多了,根据浏览器的大小,Boostrap有四种栅栏类名提供使用,用法与Css样式表类名选择器样式调用是一样的: xs:col-xs-1 ~ col-xs-12, ...