亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? combined_i186_z80_design.tex

?? This a FREE tool chain which compiles C codes into 8051 binary code, converts the binary to RTL ROM,
?? TEX
字號:
% Combined i186/Z80 design\documentclass{article}% Too long to type :)\newcommand{\tosh}{Toshiba TLCS-900H}\begin{document}\title{Combined i186/Z80 backend design}\author{Michael Hope michaelh@earthling.net.nz}\date{\today}\maketitle\begin{abstract}There is much similarity between the Zilog Z80, Nintendo GBZ80, Inteli186, and \tosh processors.  This document describes the design of abackend consisting of a register allocator and set of extendable codegenerators for SDCC which can target all of these processors.\end{abstract}\section{Motivation}The primary motivation is to add a i186 backend to SDCC, and in theprocess come to understand register allocation.  The secondary goal isto attempt to combine the common parts from the Z80 and i186 backendsto make both easier to maintain.  In the 'would be nice' category isadding support for the \tosh.\section{Processor descriptions}\subsection{Zilog Z80}\begin{tabular}{l|l|l}	Name	& Parts	& Notes \\ \hline	AF	& A	& Accumulator and flags.  Unusable as a pair. \\ \hline	BC	& B, C	& \\ \hline	DE	& D, E	& \\ \hline	HL	& H, L	& \\ \hline	IX	& None	& Index register. \\ \hline	IY	& None	& Index register. \\\end{tabular}The Z80 also has a switchable alternate register set AF', BC', DE',and HL' which are not accessible directly.  It is assumed that it istoo hard to track these to make it worthwhile.  IX and IY can be splitat the byte level by using undocumented instructions.  While thiswould make them more usable as general purpose registers, it isignored for compatibility.\subsection{Nintendo GBZ80}The GBZ80 is basically a Z80 less the index registers and thealternate register set. \\\begin{tabular}{l|l|l}	Name	& Parts	& Notes \\ \hline	AF	& A	& Accumulator and flags.  Unusable as a pair. \\ \hline	BC	& B, C	& \\ \hline	DE	& D, E	& \\ \hline	HL	& H, L	& \\\end{tabular}\subsection{Intel i186}\begin{tabular}{l|l|l}	Name	& Parts		& Notes \\ \hline	AX	& AH, AL	& Accumulator. \\ \hline	BX	& BH, BL	& \\ \hline	CX	& CH, CL	& \\ \hline	DX	& DH, DL	& \\ \hline	DI	& None		& Destination Index. \\ \hline	SI	& None		& Source Index. \\ \hline	BP	& None		& Base pointer. \\\end{tabular}Note that the segment registers CS, DS, ES, and SS are not listed.For simplicity only tiny mode is supported.  Tiny mode is where boththe data and code exist in one segment, such that CS = DS.  Thisallows constant data stored in the code segment to be accessed in thesame method as data.  This may cause trouble later if far mode isneeded.\subsection{\tosh}The 900H seems to be inspired by the Z80.  It is listed as a 16 bitdevice, but most of the registers are 32 bits wide. \\\begin{tabular}{l|l|l}	Name	& Parts		& Notes \\ \hline	XWA	& WA, W, A	& Accumulator \\ \hline	XBC	& BC, B, C	& \\ \hline	XDE	& DE, D, E	& \\ \hline	XHL	& HL, H, L	& \\ \hline	XIX	& IX		& \\ \hline	XIY	& IY		& \\ \hline	XIZ	& IZ		& \\\end{tabular}All registers can act as either an index base or an index offset.  Theoffset is limited to sixteen bits.  Apparently XIX, XIY, and XIZ canbe split at the byte level.  For simplicity this is ignored.\section{Common features}\subsection{Stack}The stack grows downwards.  All push operations are pre-decrement.All but the GBZ80 have a base pointer register that can be used alongwith an offset to access local variables and parameters.  The GBZ80 andZ80 both have problems with more than 127 bytes of local variables dueto their offset being a INT8.\subsection{Registers}All contain a reasonable but small number of registers.  All have somespecial purpose registers which can either be handled separately orignored.  All general purpose registers can be split at the byte andword level, but doing so may make the rest of the registerunavailable.\subsection{Memory}All have a 64k address space.  However this should not be assumed to makefar support easier later.\section{Design}\subsection{Basics}The design is mainly stack based, such that all local variables andparameters go onto the stack.  Compare with the mcs51 backend whichoverlays variables onto a shared static area.All stack access goes through the base pointer register (BP).  Thestack frame consists of the parameters pushed right to left, thereturn context, and then local variables.  SP points to the base ofthe local variables.  BP points to the bottom of the return contextand hence to just above the top of the local variables.  Note that asthe stack grows down the parameters appear with the left mostparameter at the lowest address.A scratch register will be available for any sub operation to use andwill be valid only within that sub operation.  The accumulator is alsounavailable.  Return values are normally returned in the scratchregister and accumulator.\begin{tabular}{l|l|l|l|l}	Name		& i186	  & Z80	    & GBZ80  & 900H 	\\ \hline	Base pointer 	& BP	  & IX	    & HL     & XIX 	\\ \hline	Scratch		& BX	  & HL	    & DE     & XHL	\\ \hline	Return		& BX, AX  & HL, IY  & DE, HL & XHL	\\ \hline	Available	& CX, DX  & BC, DE  & BC     & XBC, XDE	\\ \hline	Ignored		& SI, DI  & IY	    & None   & XIY, XIZ	\\\end{tabular}\subsection{Register allocator}The current Z80 and mcs51 register allocators perform these steps:\begin{enumerate}	\item Pack each basic block by removing straight assignments and markingremat. iTemps.	\item Set the number of registers required for each live range based onthe type and size of the live range.	\item Assign registers to each segment by deassigning registers and stacklocations for any just expired iTemps, skipping any instructions which don't needregisters, and spilling and assigning registers to the result of this tuple.	\item Create the register mask for this segment.\end{enumerate}Optimisations include assigning into the accumulator or the scratchregister where possible.  This requires knowledge of what the codegenerator touches for a given instruction.The first generation register allocator will only pack assignments and markremat. variables.  Only the register management is processor specific.  Theallocator may ask for a given size register or if a given size register isavailable.  Note that only whole registers may be returned.  For example, allocation will fail if a sixteen bit register is requested and no pairis available, even two eight bit registers are available.  Note that onthe Z80, GBZ80, and i186 a request for a 32 bit register will always fail.\subsection{Code generator}The possible operations are:\begin{itemize}	\item NOT - Logical not.  0 -> 1, others -> 0.	\item CPL - Bitwise complement.	\item UMINUS - Unary minus.  result = 0 - left.	\item IPUSH - Push immediate onto the stack.	\item CALL - Call a function.	\item PCALL - Call via pointer.	\item FUNCTION - Emit the function prelude.	\item ENDFUNCTION - Emit the function prologue.	\item RET - Load the return value and jump to end of function.	\item LABEL - Generate a local label.	\item GOTO - Jump to a local label.	\item Arithmitic - +, -, *, /, \%.	\item Comparison - LT, GT, LEQ, GEQ, !=, =.	\item Logical - \&\&, ||	\item Binary - AND, OR, XOR.	\item Shift - RRC, RLC, LSR, LSL.	\item Pointer - Set and Get.	\item Assign.	\item IF jump.	\item Misc - Jump table, cast, address of.\end{itemize}\end{document}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷综合另类小说色区| 日韩免费观看高清完整版 | 在线观看一区二区视频| 国内精品伊人久久久久av一坑 | 狠狠色伊人亚洲综合成人| 亚洲h精品动漫在线观看| 亚洲国产一区二区视频| 亚洲在线视频网站| 午夜免费欧美电影| 免费黄网站欧美| 美美哒免费高清在线观看视频一区二区| 亚洲一区二区美女| 亚欧色一区w666天堂| 日本欧美一区二区| 久久99精品久久久久婷婷| 精品一区二区三区免费视频| 国产在线精品一区二区夜色 | 欧美日韩国产高清一区二区三区 | 99精品一区二区三区| 成人av电影在线| 91国内精品野花午夜精品| 色一情一伦一子一伦一区| 欧美曰成人黄网| 欧美一卡二卡三卡| 精品日韩一区二区三区免费视频| 久久蜜臀中文字幕| 亚洲精品一卡二卡| 毛片基地黄久久久久久天堂| 国产精品一区二区你懂的| 91欧美一区二区| 日韩一区二区三区视频在线观看| 久久免费电影网| 最新中文字幕一区二区三区 | 欧美tickling挠脚心丨vk| 久久综合色一综合色88| 亚洲视频免费在线观看| 老司机精品视频一区二区三区| 丁香婷婷综合激情五月色| 欧美日韩在线播放三区四区| 欧美精品一区二区三| 亚洲天天做日日做天天谢日日欢 | 麻豆91精品视频| 波多野结衣一区二区三区 | 国产美女在线观看一区| 91行情网站电视在线观看高清版| 精品久久久久久久人人人人传媒| 亚洲黄色免费电影| 国产乱色国产精品免费视频| 在线亚洲一区观看| 国产精品久久久久毛片软件| 秋霞影院一区二区| 欧洲一区在线观看| 中国av一区二区三区| 麻豆精品蜜桃视频网站| 在线精品视频一区二区三四| 国产精品视频在线看| 久久99九九99精品| 91精品国产品国语在线不卡| 日韩理论片中文av| 不卡av在线网| 国产亚洲1区2区3区| 日韩成人av影视| 欧美在线|欧美| 一区二区三区在线观看欧美| 成人av第一页| 中文字幕一区二区三区蜜月| 国产sm精品调教视频网站| 欧美成人vps| 狠狠色丁香婷综合久久| 91精品国产aⅴ一区二区| 亚洲午夜精品在线| 欧美三级在线看| 亚洲第一精品在线| 欧洲精品中文字幕| 亚洲精品乱码久久久久久久久| 91在线看国产| 亚洲视频在线一区观看| 91色婷婷久久久久合中文| **网站欧美大片在线观看| 99视频在线精品| 亚洲黄色录像片| 欧美亚洲尤物久久| 亚洲sss视频在线视频| 91麻豆精品国产无毒不卡在线观看| 亚洲人一二三区| 日本韩国精品一区二区在线观看| 亚洲免费在线观看| 欧美三日本三级三级在线播放| 亚洲成a人v欧美综合天堂| 欧美电影一区二区三区| 免费成人在线网站| 国产无人区一区二区三区| 国产91清纯白嫩初高中在线观看| 国产精品你懂的在线欣赏| 成人国产精品免费| 亚洲国产视频在线| 日韩欧美国产小视频| 成人影视亚洲图片在线| 一区二区三区视频在线看| 欧美日本一区二区三区| 九色|91porny| 亚洲欧洲韩国日本视频| 欧美日韩一区二区三区在线看| 蜜桃传媒麻豆第一区在线观看| 久久精品一区二区三区四区| jlzzjlzz欧美大全| 日本在线不卡一区| 国产精品免费免费| 91精品国产91久久综合桃花| 成人性生交大片免费看在线播放| 亚洲精品国产成人久久av盗摄| 日韩欧美一区在线观看| 成人黄色免费短视频| 日韩电影在线一区| 中文字幕在线一区二区三区| 欧美视频一区在线| 国产成人av一区二区三区在线 | 99久久国产综合精品女不卡| 五月天亚洲精品| 国产精品日韩成人| 日韩欧美综合在线| 欧美在线不卡一区| av一区二区三区黑人| 毛片不卡一区二区| 亚洲午夜久久久| 中文字幕亚洲不卡| 久久精品无码一区二区三区| 欧美日韩一区二区三区四区五区 | 亚洲日本va午夜在线影院| 欧美一级专区免费大片| 91视频在线看| 成人视屏免费看| 久久精品国产精品青草| 亚洲毛片av在线| 国产精品水嫩水嫩| 久久久精品免费免费| 日韩午夜电影在线观看| 欧美猛男男办公室激情| 一本一道久久a久久精品 | 日韩一区二区三区免费看| 欧美亚洲精品一区| 91丨国产丨九色丨pron| 国产另类ts人妖一区二区| 蜜臀av一区二区三区| 亚洲成人一区在线| 亚洲一区在线播放| 一区二区三区中文在线观看| 亚洲视频一区二区在线观看| 欧美国产精品久久| 国产欧美一区二区三区网站| 久久精品一区蜜桃臀影院| 久久日一线二线三线suv| 日韩女同互慰一区二区| 欧美sm极限捆绑bd| 久久一二三国产| 久久久久久久性| 久久久99精品久久| 国产精品午夜电影| 国产精品乱码妇女bbbb| 国产精品久久久久天堂| 亚洲老妇xxxxxx| 亚洲国产视频直播| 麻豆精品新av中文字幕| 国内精品在线播放| 国产成人精品免费看| 成人91在线观看| 欧美在线免费观看亚洲| 欧美日韩国产综合一区二区三区| 91麻豆精品国产91久久久使用方法| 7878成人国产在线观看| 日韩欧美在线影院| 国产精品理论片| 亚洲国产综合91精品麻豆| 日韩和欧美一区二区| 精品一区二区国语对白| 国产精品88av| 色婷婷av一区二区三区大白胸| 欧洲在线/亚洲| 久久久久国产精品免费免费搜索| 国产精品无遮挡| 亚洲成人精品一区二区| 激情偷乱视频一区二区三区| 成人av网址在线| 欧美日韩黄色一区二区| 国产亚洲精品久| 亚洲国产精品一区二区久久| 黑人巨大精品欧美黑白配亚洲| 99麻豆久久久国产精品免费| 欧美人动与zoxxxx乱| 久久久久久久网| 亚洲a一区二区| 粉嫩嫩av羞羞动漫久久久| 欧美性猛交xxxxxx富婆| 国产视频一区二区三区在线观看| 亚洲自拍偷拍图区| 成人免费精品视频| 日韩欧美电影一区| 一二三四区精品视频| 成人小视频免费在线观看| 欧美一区二区三区免费视频|